如何在插入后获取 EntityFramework 中相关表的多级?
How to fetch MULTI-LEVELS of related tables in EntityFramework after an Insert?
我是典型的1-M-1关系;为了简单起见,让我们只处理 3 tables,但我真正的问题更复杂。
UsersTbl --< UserMenusTbl >-- MenusRefTbl
MenusRefTbl 是一个参考 table,它几乎是静态的。为了创建新用户,我将数据加载到 newUser 父实体 (class UsersTbl) 及其子导航 属性 (class UsersMenuTbl ).
那我打电话给
var savedUserEntity = dbCtx.UsersTbl.Add(newUser);
int rowsAffected = dbCtx.SaveChanges();
这会在 Parent 和 Child table(UsersTbl、UserMenusTbl)中插入数据,并在两个 table 中自动生成任何 @@identity primary/foreign 键;实际上,LHS 变量 savedUserEntity
现在已刷新以包含自动生成的身份。
但是,第三个 table (MenusRefTbl) 的导航 属性 仍然为空;
例如,
savedUserEntity.UserMenusTbl.MenusRefTbl = null;
如何将第 3 个 TABLE 数据提取到我的对象 savedUserEntity 中?
我见过一些方法,如 .Reload()、.LoadAsync(),但它们似乎不适用于导航属性(相关 table 的多级),或适用于我的情况。
那么我是否坚持使用新上下文从头开始重新发出新查询?
我使用相同的上下文做了什么:
var savedUserEntity = dbCtx.UsersTbl.Add(newUser);
int rowsAffected = dbCtx.SaveChanges();
rtnUserEntity = dbCtx.UsersTbl
.Include(um => um.UserMenusTbl.Select(m => m.MenusRefTbl))
.Where(u => u.userID == savedUserEntity.userID) //identity after Save
.Single(); //rtn single record
我是典型的1-M-1关系;为了简单起见,让我们只处理 3 tables,但我真正的问题更复杂。
UsersTbl --< UserMenusTbl >-- MenusRefTbl
MenusRefTbl 是一个参考 table,它几乎是静态的。为了创建新用户,我将数据加载到 newUser 父实体 (class UsersTbl) 及其子导航 属性 (class UsersMenuTbl ).
那我打电话给
var savedUserEntity = dbCtx.UsersTbl.Add(newUser);
int rowsAffected = dbCtx.SaveChanges();
这会在 Parent 和 Child table(UsersTbl、UserMenusTbl)中插入数据,并在两个 table 中自动生成任何 @@identity primary/foreign 键;实际上,LHS 变量 savedUserEntity
现在已刷新以包含自动生成的身份。
但是,第三个 table (MenusRefTbl) 的导航 属性 仍然为空;
例如,
savedUserEntity.UserMenusTbl.MenusRefTbl = null;
如何将第 3 个 TABLE 数据提取到我的对象 savedUserEntity 中?
我见过一些方法,如 .Reload()、.LoadAsync(),但它们似乎不适用于导航属性(相关 table 的多级),或适用于我的情况。
那么我是否坚持使用新上下文从头开始重新发出新查询?
我使用相同的上下文做了什么:
var savedUserEntity = dbCtx.UsersTbl.Add(newUser);
int rowsAffected = dbCtx.SaveChanges();
rtnUserEntity = dbCtx.UsersTbl
.Include(um => um.UserMenusTbl.Select(m => m.MenusRefTbl))
.Where(u => u.userID == savedUserEntity.userID) //identity after Save
.Single(); //rtn single record