【发布时间】:2012-05-24 10:20:48
【问题描述】:
我使用实体框架构建了两个应用程序,并尝试使用延迟加载来获取相关实体。其中一个延迟加载相关实体按预期工作,但我遇到另一个问题。我仍然可以加载相关实体,但是一旦检索到集合,我只会得到一个实体,甚至应该有更多。
我用过:
base.ContextOptions.LazyLoadingEnabled = true;
在我的数据上下文中。另外,我将我的相关收藏设为虚拟:
public virtual ICollection<Product> Products { get; set; }
我现在花了一天多的时间来寻找这两个应用程序之间的区别,但我找不到任何区别。一个应用程序的位置包含事件并且工作正常。另一个有包含产品的类别,那是不工作的。有没有人遇到过类似的问题?!我忽略了什么。
问题是当我在一个视图中迭代我的产品时,我只能看到集合中的一个元素:
@foreach(var Product in Model.Products) { @Product.Name }
然后我只得到一个产品名称,甚至应该不止一个!
【问题讨论】:
-
您是否测试过预加载是否返回多个元素(在加载类别时使用
Include("Products"))? -
是的,我做到了,完全一样。所以实际上这可能不是延迟加载的问题。我只是在集合中只返回一个实体。
-
嗯,您是否仔细检查过您是否真的有不止一种产品用于相关类别?您可以通过在 SQL Server Management Studio 中编写 SQL 查询(或其他类似工具,如果您使用另一个数据库)来做一个简单的测试:说,您的问题是类别 5。然后检查
select * from products where categoryId = 5(categoryId是外国输入 products 表)并检查返回的行数。 -
男人; 是延迟加载。 (对不起;无法抗拒边缘射击的时刻)
-
是的,我做了仔细检查。但即使我使用包含的预加载,我也只能得到一种产品。奇怪的是,我没有得到产品的空引用,但我只得到了该集合中的一项!
标签: .net entity-framework