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文件来表示数据库吗?