Ich möchte Entity Framework POCO in einem getrennten (aus Kontext) -Modus verwenden. In meinem Szenario erstelle ich ein neues Eltern-Objekt und möchte ein vorhandenes Kind-Objekt anhängen und dann in der Datenbank speichern.
Der folgende Code fügt in unerwünschter Weise einen neuen Kursdatensatz ein, wenn ein neuer Schülerdatensatz gespeichert wird. Stattdessen möchte ich den vorhandenen Kursdatensatz mit dem neuen Schülerdatensatz verknüpfen.Entity Framework: Hinzufügen vorhandener untergeordneter POCO zu neuem übergeordneten POCO, Erstellen eines neuen untergeordneten Elements in DB
Wie kann ich dies tun in Entity Framework, wo ...
- die Objekte aus dem Kontext getrennt werden. (d. h. in einem Kontext abgefragt und dann in einem anderen Kontext gespeichert)
- Ich muss den untergeordneten Datensatz nicht erneut aus der DB abfragen, nur damit ich ihn an den übergeordneten anhängen kann, wenn ich in db speichere. Ich möchte wirklich vermeiden, extra Fahrten zum db zu machen, wenn ich es bereits als ein Objekt im Speicher habe.
Diese Seite zeigt eine Datenbank-Diagramm, das die folgenden Code auf http://entityframeworktutorial.net/EF4_EnvSetup.aspx#.UPMZ4m-UN9Y
class Program
{
static void Main(string[] args)
{
//get existing course from db as disconnected object
var course = Program.getCourse();
//create new student
var stud = new Student();
stud.StudentName = "bob";
//assign existing course to the student
stud.Courses.Add(course);
//save student to db
using (SchoolDBEntities ctx = new SchoolDBEntities())
{
ctx.Students.AddObject(stud);
ctx.SaveChanges();
}
}
static Course getCourse()
{
Course returnCourse = null;
using (var ctx = new SchoolDBEntities())
{
ctx.ContextOptions.LazyLoadingEnabled = false;
returnCourse = (from s in ctx.Courses
select s).SingleOrDefault();
}
return returnCourse;
}
}
Die zweite Option funktioniert fast, aber ich bekomme ein "Das Objekt kann nicht angefügt werden, da es bereits im Objektkontext ist." Fehler beim "ctx.Students.AddObject (Stud)" Linie. Ich nehme an, ich kann das nicht tun, während ich noch "stud.Courses.Add (course) mache"; bevor . Ich möchte immer noch die Courses-Kollektion im Stud-Objekt nutzen. – MakkyNZ
Nun, ich habe keine praktische Lösung, um es zu testen, aber versuche es zuerst anzuhängen und dann dem Schüler hinzuzufügen. Hoffentlich wird es nicht als "Hinzugefügt" von EF markiert. –
das ist nicht wirklich ideal. Ich möchte, dass die Eltern-Kind-Beziehung zuerst auf Objektebene stattfindet, da sie möglicherweise noch nicht bereit ist, in db zu speichern. Vielleicht sollte ich einfach alle Beziehungen zwischen den Entitäten, die EF generiert, entfernen und diese selbst manuell steuern? – MakkyNZ