EntityFramework, вставьте, если не существует, в противном случае обновите

У меня есть набор сущностей стран, отражающий таблицу базы данных '<' 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();
        }
23
задан Juan Mellado 4 May 2012 в 14:00
поделиться