У меня есть набор сущностей стран, отражающий таблицу базы данных '<' 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-скрипт, который вставляет их, вместо того, чтобы проверять, есть ли страна в базе данных перед вставкой?
Я добавил переопределение, равное моему классу страны:
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();
}