2016-11-13 67 views
1

我有一個場景,我需要在表中插入一條記錄 - myPerson實體獲取personID(int identity)。然後,我需要取得該personID並將其添加到familyAdmin.personID。從尚未保存的實體獲取ID

我希望在一個db.SaveChange()中做所有這一切。

由於person實體是userAdmin實體的一部分,是否有辦法做到這一點?

目前,我怎麼把它設置:

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(); 

此選項是目前沒有工作。當我執行此選項時,不會產生錯誤。我只是得到一個0而不是一個1,2,3等。

插入到人表中正在工作,並正在生成一個ID。這只是當我嘗試檢索ID做插入到UserAdmin表在同一時間,我得到了0

我必須做這樣的事情:

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(); 

部分EDMX圖像:

enter image description here

+0

而且是選項之一不適合你嗎? – ErikEJ

+0

是的,這是正確的。 - 我更新了我的問題以反映這一點。 – webdad3

+0

什麼時候它不工作?錯誤消息? – CodeNotFound

回答

3

第一個選項是行不通的,因爲這兩條線:

myPerson.familyID = familyAdmin.familyID; 

familyAdmin.personID = myPerson.personID; 

這些行不是必需的,因爲您正在檢查未在數據庫中創建的標識符。

您的代碼應該是這樣的:

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(); 

如果你已經正確配置上userAdmin實體和person實體people性能之間的關係,從而通過使用familyAdmin.people.Add(myPerson);calling db.SaveChanges();然後EF將調用DetectChanges內部,以便將修復這兩個實體之間的關係,並以正確的順序生成正確的SQL,因爲它知道哪個實體需要先插入,哪個實體需要外鍵id。

+0

我會給你一個鏡頭。謝謝 - – webdad3

+0

我能夠將familyID獲取到person實體中,但userAdmin實體中的personID仍然爲0。有任何想法嗎? – webdad3