我尝试使用实体拆分,以便使用从数据库视图收集的属性扩展我的实体。如果我直接加载分割的实体,这可以正常工作,但如果我有一个实体通过导航属性连接分割的实体,它就不起作用。
让我们粗略地说它看起来像这样 [实体A] - [实体B] - [实体C]
如果未分割实体C,我可以获取实体A并通过实体B导航到实体C,这是通过使用延迟加载的导航属性完成的(据我所知)。这就像一个魅力。
如果实体C是包含数据库表和数据库视图之外的数据的拆分实体,则上述从实体A到实体C的导航返回null。另一方面,如果我直接加载实体C,它将完全加载包含数据库表的数据以及数据库视图的数据。
我有没有想到的特别的东西?
答案 0 :(得分:0)
Gil Fink的文章可能有所帮助。
http://blogs.microsoft.co.il/blogs/gilf/archive/2009/03/06/entity-splitting-in-entity-framework.aspx
如果实体C是包含数据库表和数据库视图之外的数据的拆分实体,则上述从实体A到实体C的导航返回null。另一方面,如果我直接加载实体C,它将完全加载包含数据库表的数据以及数据库视图的数据。
你说的听起来是对的。如果正确拆分表,则实体C中将不再提供这些属性。
如果您“不是一直”需要实体C中的属性,那么您的第一个映射方案就足够了。
答案 1 :(得分:0)
我的问题是,分裂的实体通过内部联接(参见这里的讨论http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/237c1de4-7a42-4c3f-80ab-16601e7fadac/)得到连接,我期望的是左连接,以便在存在附加表的属性时添加它们如果没有,则忽略。实际上,如果附加表中没有条目,则整个实体不会被初始化。
上面提到的延迟加载问题只是一个巧合,因为一方面我加载了一个包含aditional属性的实体,另一方面是一个没有的实体,因此甚至没有按照前面的描述进行初始化。