0

我尝试使用实体拆分来使用从数据库视图收集的属性扩展我的实体。如果我直接加载拆分实体,这工作得很好,但如果我有一个实体,拆分实体通过导航属性连接,它就不起作用。

让我们粗略地说它看起来像这样 [Entity A]-[Entity B]-[Entity C]

如果实体 C 未拆分,我可以获取实体 A 并通过实体 B 导航到实体 C,这是通过使用延迟加载的导航属性完成的(据我所知)。这就像一个魅力。

如果实体 C 是包含来自 DB 表和 DB 视图的数据的拆分实体,则上述从实体 A 到实体 C 的导航返回 null。另一方面,如果我直接加载实体 C,它会完全加载,其中包含 DB 表的数据以及 DB 视图的数据。

有什么我没有想到的特别之处吗?

4

2 回答 2

0

这是 Gil Fink 的一篇文章,可能会有所帮助。

http://blogs.microsoft.co.il/blogs/gilf/archive/2009/03/06/entity-splitting-in-entity-framework.aspx

如果实体 C 是包含来自 DB 表和 DB 视图的数据的拆分实体,则上述从实体 A 到实体 C 的导航返回 null。另一方面,如果我直接加载实体 C,它会完全加载,其中包含 DB 表的数据以及 DB 视图的数据。

你说的听起来很对。如果您正确拆分表,那么这些属性将不再在实体 C 中可用。

如果您“一直”不需要实体 C 的属性,那么您的第一个映射方案就足够了。

于 2012-12-06T14:37:27.707 回答
0

我的问题是,拆分的实体通过内部连接进行连接(请参阅此处的讨论http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/237c1de4-7a42-4c3f-80ab-16601e7fadac / ) 我所期望的类似于左连接,因此如果附加表中的属性存在则添加,如果不存在则忽略。事实上,如果附加表中没有条目,则整个实体不会被初始化。

上面描述的延迟加载问题只是一个巧合,因为一方面我加载了一个包含附加属性的实体,另一方面,一个实体没有,因此甚至没有像之前描述的那样被初始化。

于 2012-12-07T08:31:21.057 回答