Fremdschlüssel in Entity Framework nicht richtig aktualisiert

Ich habe ein Problem mit foreign key-Beziehungen im entity framework. Ich habe zwei Tabellen: Persons und Countries. Persons hat eine foreign-key-Spalte zu CountryId.

Als Countries Tabelle selten ändert, ich möchte zu Holen Ihre Daten nur einmal, entsorgen Sie die DatabaseContext, und halten Sie die Liste der Countries irgendwo zwischengespeichert. Dies ist, wo habe ich Probleme.

Entity framework scheint zu wollen, dass Sie eine Datenbank öffnen, Rahmen, hinzufügen/Bearbeiten von Zeilen wie nötig, und schließen Sie dann die Datenbank-Kontext. Wenn Sie öffnen, abrufen von Daten, schließen; und dann später öffnen, Daten speichern, schließen; er hat Schwierigkeiten.

Also meine POCO-Objekte wie folgt Aussehen:

public class Country {
    public int CountryId {get; set; }
    public String Name {get; set; }
}

public Person {
    public int PersonId {get; set; }
    public virtual Country Country {get; set; }
}

Dann versuche ich eine neue person wie diese:

Country[] countries;
using (var dt = new DatabaseContext())
{
    countries= dt.Countries.ToArray();
}

Person person = new Person();
person.Country = countries[0];
using (var dt = new DatabaseContext()) { 
    dt.Entities.Add(person);
    dt.SaveChanges();
}

Auf speichern, entity framework erstellt eine neue Zeile in der Countries Tabelle mit dem gleichen Namen wie countries[0], aber eine neue, erhöhte ID. Dies ist offensichtlich nicht das gewünschte Ergebnis - die person sollte seine Country_CountryId Feld auf die id des countries[0], und eine neue Zeile sollte nicht erstellt werden.

Wie löse ich dieses? Ich denke eine Lösung wäre die Kraft, die das entity framework nicht erstellen Sie eine neue Zeile, wenn er ein Objekt, das schon dem Primärschlüssel gesetzt. Gibt es eine Möglichkeit, dies zu tun?

InformationsquelleAutor Oliver | 2012-04-16
Schreibe einen Kommentar