In Sachen ORM sehe ich mich zurzeit als „ambitionierter Laie“; ich habe schon einige Projekte damit umgesetzt, glaube auch, dass diese stabil und performant laufen, und bin trotzdem noch nicht in die Tiefen komplett eingestiegen.
Deshalb habe ich mich auch gewundert, als ich bei einer Konstellation Primary-/Foreign-Key gemerkt habe, dass bereits vorhandene Eltern-Objekte vom Entity Framework erneut einzufügen versucht wurden, als ich ein Kind-Element gespeichert hatte.
Zum Glück bin ich dann auf diesen Artikel im MSDN-Magazin gestoßen:
"Why Does Entity Framework Reinsert Existing Objects into My Database?"
Dort wird ein ähnliches Szenario beschrieben, das meinem zumindest geähnelt hat.
Die Lösung ist, dass bei Fremdschlüssel-Navigations-Eigenschaften nicht das Navigations-Fremdschlüssel-Objekt sondern nur die Fremdschlüssel-ID beim Kind-Element zugewiesen wird.
Z.B.:
using (var context = new ScreencastContext())
{
screencast.TopicId = topicId;
screencast.Topic = null; // Kein Objekt, nur obige ID zuweisen.
context.Screencasts.Add(screencast);
context.SaveChanges();
}
Anschließend hat es bei mir auch funktioniert.