C# 自跟踪实体-加载导航属性的导航属性

C# 自跟踪实体-加载导航属性的导航属性,c#,.net,entity-framework,entity-framework-4,C#,.net,Entity Framework,Entity Framework 4,我很好奇EntityFramework4.0中针对这种情况的最佳实践是什么。我有以下实体图: 实体A->实体B->实体C 其中,实体A包含实体B的列表,每个实体B包含实体C的列表。我正在使用自跟踪实体,当我加载实体A时,我正在执行类似的操作: EntityA entityA = ctx.EntityA.Include("EntityB").Where(x => x.Id == id).SingleOrDefault(); 当我尝试这样做时: EntityA entityA = ctx.E

我很好奇EntityFramework4.0中针对这种情况的最佳实践是什么。我有以下实体图:

实体A->实体B->实体C

其中,实体A包含实体B的列表,每个实体B包含实体C的列表。我正在使用自跟踪实体,当我加载实体A时,我正在执行类似的操作:

EntityA entityA = ctx.EntityA.Include("EntityB").Where(x => x.Id == id).SingleOrDefault();
当我尝试这样做时:

EntityA entityA = ctx.EntityA.Include("EntityB").Include("EntityC").Where(x => x.Id == id).SingleOrDefault();
它失败,因为它找不到导航属性“Entity C”。有没有办法加载导航属性?我还需要能够跟踪各种CRUD操作的更改、接受更改和标记为已删除


作为一个附带问题,是否有一个公共属性用于标识实体框架中的导航属性?我希望使用反射和递归来识别我的所有导航属性。

试试这个。它从对象图中的当前点加载导航属性:

EntityA entityA = ctx.EntityA.Include("EntityB.EntityC").Where(x => x.Id == id).SingleOrDefault();
如果使用自跟踪实体T4模板生成实体,则它应自动跟踪整个对象图中的更改


将自跟踪T4模板添加到项目中后,您可以打开该模板并修改文件,并在生成导航属性的部分中添加自定义属性。

尝试此操作。它从对象图中的当前点加载导航属性:

EntityA entityA = ctx.EntityA.Include("EntityB.EntityC").Where(x => x.Id == id).SingleOrDefault();
如果使用自跟踪实体T4模板生成实体,则它应自动跟踪整个对象图中的更改


将自跟踪T4模板添加到项目中后,您可以打开该模板并修改文件,并将自定义属性添加到生成导航属性的部分。

我确实使用了STE T4模板来生成实体,但是,我仍然必须执行以下操作:foreach(entity.EntityB中的EntityB EntityB)entityB.AcceptChanges();另外,是否有一种方法可以在加载实体时自动包含导航属性?某种[Include]属性?
ObjectContext
有一个属性
ObjectContext.ContextOptions.LazyLoadingEnabled
,但在我自己尝试过之后,我认为它不适用于sef跟踪实体。同样,欢迎您修改T4模板以使其支持延迟加载。如果您只需在对象上下文上调用
SaveChanges()
,会发生什么情况?实体上跟踪的所有更改都应自动更新到数据存储。您如何使用这些实体?通过WCF服务、ASP.NET应用程序、富客户端?它们是否在某个时刻与上下文分离,然后需要重新附加和同步更改?正确,它们是分离的实体,稍后我将重新附加。如果我只对每个实体实例执行SaveChanges()而不是AcceptChanges(),则实体的状态不会从Modified/Add更改为NotModified。我确实使用了STE T4模板来生成实体,但是,我仍然必须执行以下操作:foreach(entity.EntityB中的EntityB EntityB)EntityB.AcceptChanges();另外,是否有一种方法可以在加载实体时自动包含导航属性?某种[Include]属性?
ObjectContext
有一个属性
ObjectContext.ContextOptions.LazyLoadingEnabled
,但在我自己尝试过之后,我认为它不适用于sef跟踪实体。同样,欢迎您修改T4模板以使其支持延迟加载。如果您只需在对象上下文上调用
SaveChanges()
,会发生什么情况?实体上跟踪的所有更改都应自动更新到数据存储。您如何使用这些实体?通过WCF服务、ASP.NET应用程序、富客户端?它们是否在某个时刻与上下文分离,然后需要重新附加和同步更改?正确,它们是分离的实体,稍后我将重新附加。如果对每个实体实例只执行SaveChanges()而不执行AcceptChanges(),则实体的状态不会从Modified/Added更改为NotModified。