【发布时间】:2012-05-17 20:35:42
【问题描述】:
好的!
我不得不说这两种技术都很棒。虽然好像有什么我不明白。
您的数据库中有一个数据(假设您想显示一个表中的数据,该表引用了其他表)。
我有一个带有 List 或 IEnumerable 或 IQueryable 或其他的模型......
所以在我看来,我想通过对象列表进行 foreach 并利用对其他表的引用的酷特性。当您在控制器中时,控制器没有问题
using (var datatabse = new MyEntity)
{
}
但是当您停止使用 db has 已释放时,您会遇到常见错误 ObjectContext 实例已被释放,不能再用于需要连接的操作。
所以我没有看到其他选项作为在内存中创建实体对象的副本...但是您丢失了所有很酷的 EF4 引用,您必须首先在模型中手动加载数据,然后使用 foreach 在视图中显示它。
所以而不是 List 或 IEnumerable 或 IQueryable
您必须执行 List 其中 MyCustomHelperClass 表示具有与实体对象类似的属性的类,并且可能还有一些额外的因为您无权访问引用表的属性然后您必须执行 foreach 并将数据加载到此List 和另一个 @foreach 在视图上使用 Razor 显示所有内容。
两倍的工作量,如果项目很大......您可以更全面地了解您需要多少这些 helperClass。所有这些很酷的新技术真的要以这种方式使用吗?....还是我错过了什么。
【问题讨论】:
-
当您在视图中引用延迟加载的属性时,您可能会遇到该错误。在将它传递给视图之前,您应该在控制器中预先加载您需要的所有内容。
-
急切负载是您在 linq 链上使用 Include(othertable) 的地方
标签: asp.net-mvc-3 entity-framework-4