2012-06-30 77 views
1

我對實體框架非常陌生,所以如果它是一個非常糟糕的問題,我很抱歉,但是我找不到對我有意義的解決方案。雖然我的問題很複雜,但我會盡量簡化它。假設我有兩個模型Company和CompanyAddress。實體框架 - 如何在不知道主鍵的情況下添加引用對象的實體

+--------------------Company---------------------------------------+ 
| int CompanyId 
| string CompanyName 
| 
| virtual <ICollection>CompanyAddress address // Navigation Property 
+-------------------------------------------------------------------+ 

而且,

+--------------------CompanyAddress---------------------------+ 
| int CompanyAddressId 
| string Address 
| 
| int CompanyAddressId   // Foreign Key to Address Table 
| virtual CompanyAddress address // Related Navigation Property 
+--------------------------------------------------------------+ 

如可以看出公司實體可以有一個以上的公司地址。在我的ASP.NET MVC項目中,我也有ViewModel。

+--------------------CompanyCreateViewModel----------------+ 
| Company company 
| CompanyAddress address 
+---------------------------------------------------------+ 

這兩個屬性在視圖中填充並傳遞給控制器​​沒有問題。我的問題現在開始了。我應該如何插入這兩個實體?

比方說,我首先插入公司實體,然後用select語句獲取其primaryKey並將此值分配給CompanyAddress的外鍵並插入它。但是,這對我來說沒有意義,因爲我需要提供另一個主鍵請求。

我應該如何插入我的實體,什麼是最好的方法?對不起,很長的問題,謝謝。

+0

我不明白你所說的這個陳述「但是,這對我來說沒有意義,因爲我需要提供另一個主鍵請求。」 - 爲什麼你認爲你需要爲同一個主鍵做出另一個請求鍵?一旦您爲公司調用SaveChanges(),您就會在該對象中擁有PrimaryKey。將其分配給CompanyAddress的外鍵並再次調用SaveChanges()。 – TheGeekYouNeed

+2

嗯,不知道。正如我所說,我對orm和ef事物非常陌生。無論如何,這解決了我的問題:)請寫作答案,我可以接受它。謝謝... –

+0

很高興幫助:) – TheGeekYouNeed

回答

2

一旦您爲公司調用SaveChanges(),您在該對象中具有PrimaryKey。將其分配給CompanyAddress的外鍵並再次調用SaveChanges()。

+1

順便說一句,這是一個很好的方法?我正在考慮通過導航屬性將地址分配給公司,然後將公司和地址實體一起插入。不是先插入公司,然後是地址? –

+1

如果你的數據庫設置正確,那也可以。這是一步,而不是兩步。哪個更有效率:) – TheGeekYouNeed

相關問題