1

我有幾個引用同一個表的表。例如:
人有一個地址。
商家有一個地址。渴望加載實體框架和Asp .net mvc(來自rails背景)

當使用模型,我想這樣做的控制器:

person.Address.Zip 
business.Address.Zip 

我從軌道的背景,我可以只是聲明瞭一個關係,並擁有上述所有功能的到來。當我得到對象(人員或業務)時強制加載地址。

我是新來的實體框架,我正在努力如何實現該功能。我不能在兩種模式(個人和企業)中包含表格。如果我使用存儲庫模式並將對象添加到類的部分中,那麼我使用延遲加載。

我看着這個錯嗎?我可以使用的任何模式建議?

回答

2

如果您使用的實體框架4.0與Visual Studio 2010延遲加載是自動的。

如果您使用實體框架1.0你的生命剛剛更難......

要使用EF1渴望負載,你必須使用include()方法在你的ObjectQuery並指定導航屬性(地址)。例如:

ModelContainer.Persons.Where(@p => @p.Id == 39).Include("Address") 

對於「懶惰」加載,您必須手動加載所有FK關聯。例如:

var myPeople = ModelContainer.Persons.Where(@p => @p.Id == 39 

if(!myPeople.Address.IsLoaded()) 
    myPeople.Address.Load() 

另一種方法是修改EF1如何生成模型類型幷包括延遲加載。

http://code.msdn.microsoft.com/EFLazyLoading

+0

謝謝!這對我如何重新安排實體數據模型非常有用。 – Becky 2009-12-04 02:13:10

+1

也必須在EF4中使用.Include(「地址」) – 2010-11-11 11:34:04

-1

理想情況下,您應該能夠遍歷對象模型以獲取所需的大部分數據,從對當前用戶對象的引用開始。

+0

你是什麼意思? 「你應該能夠遍歷對象模型來獲取你需要的大部分數據」並不是我所說的我想要做的事情:person.Address.Zip?我怎樣才能更清楚? – Becky 2009-12-03 21:38:44

+0

對於突然感到抱歉 - 我試圖說你不應該去創建不需要的存儲庫實現,而應該完全建立對象關係的模型 - 一個大的數據模型應該允許這樣做。 – mcintyre321 2009-12-04 09:56:23

0

以前,我是爲每個控制器創建ADO.NET實體數據模型。

現在我已經爲所有表格創建了一個數據模型(它不是一個怪異的數據庫)。這樣我可以在查詢加載時加入表格。

如果有人有更好的建議。讓我知道。如果有人知道大型數據庫的正確行爲,請發表評論。你想要一個大的edmx文件來表示數據庫嗎?