2016-11-13 2 views
1

Ich habe ein Szenario, in dem ich einen Datensatz in eine Tabelle einfügen muss - die myPerson-Entität, um die personID (int identity) zu erhalten. Dann muss ich diese personID nehmen und sie der familyAdmin.personID hinzufügen.Erhalte ID von einer Entität, die noch nicht gespeichert wurde

Ich hatte gehofft, all dies in einem db.SaveChange() zu tun;

Gibt es eine Möglichkeit, dies in einem zu tun, da die Personenentität Teil der Entität userAdmin ist?

Derzeit wie ich es einrichten:

userAdmin familyAdmin = new userAdmin(); 
familyAdmin.signupDate = DateTime.Today; 
familyAdmin.lastLogin = DateTime.Today; 
familyAdmin.registrationID = newReg.registrationID; 

person myPerson = new person(); 
myPerson.personName = newReg.name; 
myPerson.personEmail = newReg.email; 
myPerson.personPhone = newReg.phone; 
myPerson.personPhoneCarrier = newReg.carrierName; 
myPerson.personDOB = newReg.dob; 
myPerson.familyID = familyAdmin.familyID; 
myPerson.personTypeID = newReg.personTypeID; 

familyAdmin.personID = myPerson.personID; 
familyAdmin.people.Add(myPerson); 

db.userAdmins.Add(familyAdmin); 
db.SaveChanges(); 

Diese Option arbeitet derzeit nicht. Es gibt keinen Fehler, der erzeugt wird, wenn ich diese Option mache. Ich bekomme nur eine 0 anstelle von 1,2,3 usw.

Die Einfügung in die Personentabelle funktioniert und eine ID wird korrekt generiert. Es ist nur, wenn ich versuche, diese ID abzurufen den Einsatz in die Admin Tabelle zur gleichen Zeit zu tun, dass ich die 0.

bekomme ich so etwas wie dies zu tun:

person myPerson = new person(); 
myPerson.personName = newReg.name; 
myPerson.personEmail = newReg.email; 
myPerson.personPhone = newReg.phone; 
myPerson.personPhoneCarrier = newReg.carrierName; 
myPerson.personDOB = newReg.dob; 
myPerson.familyID = familyAdmin.familyID; 
myPerson.personTypeID = newReg.personTypeID; 

db.person.Add(myPerson); 
db.SaveChanges(); 


userAdmin familyAdmin = new userAdmin(); 
familyAdmin.signupDate = DateTime.Today; 
familyAdmin.lastLogin = DateTime.Today; 
familyAdmin.registrationID = newReg.registrationID; 
familyAdmin.personID = myPerson.personID; 

db.userAdmins.Add(familyAdmin); 
db.SaveChanges(); 

Teil EDMX Bild:

enter image description here

+0

Und ist Option 1 nicht für Sie arbeiten? – ErikEJ

+0

ja das ist richtig. - Ich habe meine Frage aktualisiert, um das zu berücksichtigen. – webdad3

+0

Was es sagte, wenn es nicht funktioniert? Die Fehlermeldung? – CodeNotFound

Antwort

3

Die erste Option funktioniert nicht, weil diese beiden Linien:

myPerson.familyID = familyAdmin.familyID; 

familyAdmin.personID = myPerson.personID; 

Diese Zeilen sind nicht erforderlich, da Sie Kennungen überprüfen, die nicht in der Datenbank erstellt werden.

Der Code sollte wie folgt aussehen:

userAdmin familyAdmin = new userAdmin(); 
familyAdmin.signupDate = DateTime.Today; 
familyAdmin.lastLogin = DateTime.Today; 
familyAdmin.registrationID = newReg.registrationID; 

person myPerson = new person(); 
myPerson.personName = newReg.name; 
myPerson.personEmail = newReg.email; 
myPerson.personPhone = newReg.phone; 
myPerson.personPhoneCarrier = newReg.carrierName; 
myPerson.personDOB = newReg.dob; 
// myPerson.familyID = familyAdmin.familyID; Not necessary 
myPerson.personTypeID = newReg.personTypeID; 

// familyAdmin.personID = myPerson.personID; Not necessary 
familyAdmin.people.Add(myPerson); 

db.userAdmins.Add(familyAdmin); 
db.SaveChanges(); 

Wenn Sie richtig die Beziehung zwischen people Eigenschaft auf userAdmin Einheit und person Einheit so konfiguriert haben, unter Verwendung von familyAdmin.people.Add(myPerson); und calling db.SaveChanges(); dann EF DetectChanges intern nennen, so dass behebt die Beziehung zwischen diesen beiden Entitäten und generieren Sie die richtige SQL in der richtigen Reihenfolge, weil es weiß, welche Entität zuerst eingefügt werden muss und welche Entität die Fremdschlüssel-ID benötigt.

+0

Ich werde das eine Chance geben.Danke - – webdad3

+0

Ich war in der Lage, die Familien-ID in die Personenentität zu bekommen, aber personID war immer noch 0 in der Entität userAdmin. Irgendwelche Ideen? – webdad3

Verwandte Themen