EntityFramework, Einfügen, falls nicht vorhanden, ansonsten aktualisieren

Bin ich mit einer Entity-Set-Ländern, was auf eine Datenbank-Tabelle '<'char(2) char(3),nvarchar(50> in meiner Datenbank.

Ich habe einen parser zurückgibt, Land [] - array der analysierten Länder, und Probleme mit immer es aktualisiert wird, in der richtigen Weise. Was ich will, ist: Nehmen Sie die Reihe von Ländern, für die Länder, die nicht bereits in die Datenbank eingefügt und vorhandene aktualisieren, wenn Sie alle Felder anders ist. Wie kann das getan werden?

void Method(object sender, DocumentLoadedEvent e)
{
    var data = e.ParsedData as Country[];
    using(var db = new DataContractEntities)
    {
       //Code missing


    }
}

Ich dachte so etwas wie

for(var c in data.Except(db.Countries)) but it wount work as it compares on wronge fields.

Hoffe jemand hatte diese Probleme vor, und eine Lösung für mich. Wenn ich nicht das Country-Objekt-und insert - /update-ein array von Ihnen einfach, ich sehe nicht viel benefict von den Rahmen, wie von Künstlern, die ich denke, die schneller zum schreiben eines benutzerdefinierten sql-Skript, fügt Sie anstelle von ect überprüfen, ob ein Land bereits in der Datenbank vor dem einfügen?

Lösung

Siehe Antwort der post statt.

Fügte ich equals überschreiben, um mein Land Klasse:

    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;
    }
}

und habe Sie dann:

        var data = e.ParsedData as Country[];
        using (var db = new entities())
        {
            foreach (var item in data.Except(db.Countries))
            {
                db.AddToCountries(item); 
            }
            db.SaveChanges();
        }
Kommentar zu dem Problem
Sie können auch verwenden, neu veröffentlicht-Bibliothek, die automatisch die satet aller Entitäten im entity graph. Lesen Sie meine Antwort auf die ähnliche Frage. Kommentarautor: Farhad Jabiyev

InformationsquelleAutor der Frage Poul K. Sørensen | 2011-08-06

Schreibe einen Kommentar