У меня есть страны-объекты, отражающие таблицу базы данных '<' char (2), char (3), nvarchar (50 > в моей базе данных.
У меня есть синтаксический анализатор, который возвращает массив Country [] проанализированных стран и имеет проблемы с его обновлением в правильном направлении. Я хочу: возьмите множество стран, для тех стран, которые еще не добавлены в базу данных, и те существующие обновления, если какие-либо поля отличаются. Как это можно сделать?
void Method(object sender, DocumentLoadedEvent e)
{
var data = e.ParsedData as Country[];
using(var db = new DataContractEntities)
{
//Code missing
}
}
Я думал что-то вроде
for(var c in data.Except(db.Countries)) but it wount work as it compares on wronge fields.
Надеюсь, что у кого-то были эти проблемы раньше, и у меня есть решение для меня. Если я не могу использовать объект Country и вставлять/обновлять массив из них легко, я не вижу много пользы от использования фреймворка, так как от исполнителей я думаю, что быстрее написать пользовательский sql script, который вставляет их вместо проверки ect, если страна уже находится в базе данных перед вставкой?
Решение
См. ответ сообщения вместо.
Я добавил, что переопределение соответствует классу моей страны:
public partial class Country
{
public override bool Equals(object obj)
{
if (obj is Country)
{
var country = obj as Country;
return this.CountryTreeLetter.Equals(country.CountryTreeLetter);
}
return false;
}
public override int GetHashCode()
{
int hash = 13;
hash = hash * 7 + (int)CountryTreeLetter[0];
hash = hash * 7 + (int)CountryTreeLetter[1];
hash = hash * 7 + (int)CountryTreeLetter[2];
return hash;
}
}
а затем:
var data = e.ParsedData as Country[];
using (var db = new entities())
{
foreach (var item in data.Except(db.Countries))
{
db.AddToCountries(item);
}
db.SaveChanges();
}