我很好奇Entity Framework 4.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操作跟踪更改,接受更改和MarkAsDeleted。
作为一个侧面问题,是否存在用于在实体框架中标识导航属性的公共属性?我希望使用反射和递归来识别我的所有导航属性。
答案 0 :(得分:1)
试一试。它从对象图中的当前点加载导航属性:
EntityA entityA = ctx.EntityA.Include("EntityB.EntityC").Where(x => x.Id == id).SingleOrDefault();
如果您使用自我跟踪实体T4模板生成实体,那么它应该会自动跟踪整个对象图中的更改。
将自我跟踪T4模板添加到项目后,您可以打开它并修改文件并将自定义属性添加到生成导航属性的部分。