Ian*_*ers 7 c# linq-to-entities entity-framework
环境
我在Framework 4.0上使用Entity Framework 5.(这意味着我实际上使用的是EF 4.4).作为实体我使用STE(自我跟踪实体)因为我在N-Tier应用程序中工作.我们使用数据库驱动的方法,因为EF是在游戏后期引入的.
上下文
我有两个实体,彼此都有一个导航属性.(EntityA具有EntityB的导航属性,EntityB具有EntityA的导航属性).关系是'EntityA> One-To-Many> EntityB'.当我想通过LINQ表达式加载子实体时,我需要使用INCLUDE(STE => Eager Loading),因为我将通过几个层传递所有数据.
代码
这是我的代码,用它的EntityB孩子调用EntityA.
using (var ctx = new MyEntities())
{
var result = (from s in ctx.EntityA.Include("EntityB")
where s.Id = 11111
orderby s.TimeUpdated descending
select s)
.Take(10)
.ToList();
return result;
}
Run Code Online (Sandbox Code Playgroud)
错误
System.StackOverflowException {无法计算表达式,因为当前线程处于堆栈溢出状态.}
删除'INCLUDE'时没有错误.我想原因很简单.我想加载带有子记录EntityB的EntityA,EntityB记录每次都要加载其父EntityA,而EntityA ......我想每个人都理解这里的无限循环.
我的解决方案或替代品
这个问题
在我的情况下,有更好的替代方法或方法来解决这个问题吗 我应该继续提出我提出的替代方案吗?因为我希望有一个更好,更清洁的解决方案.
我感谢你的时间
伊恩
我尝试在 EF 5 (Visual Studio 2012) 中重现您的问题,但没有收到任何错误。还有其他什么可能会导致您的问题吗?它可以使用简单的 POCO 设置吗?
我还想指出,STE 可能会让您非常头疼。我以前曾与 STE 合作过,现在我真的想避开它们。您确定要使用 STE 吗?
您可以使用普通的旧 DTO,而不是使用 STE。您将在服务器上保留丰富的域模型,并仅将必要的数据发送到客户端。通过这种方式,您可以为每个用例使用最少的数据创建定制的 DTO。
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |