【发布时间】:2020-01-29 23:42:29
【问题描述】:
我有几个模型正在尝试与 Include 绑定,它没有返回所有预期的相关数据。完整的链条是:
用户(一)> 角色(一)> 权限(多)> 实体(一)> EntityArea(一)
这些是我的模型:(CompanyBase 是一个带有 companyId 的基类)
public class User : _CompanyBase
{
public int UserID { get; set; }
public string FullName { get; set; }
public int RoleID { get; set; }
public Role Role { get; set; }
}
public class Role : _CompanyBase
{
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int RoleID { get; set; }
[Required]
[StringLength(100, MinimumLength = 3)]
public string Name { get; set; }
public ICollection<RolePermission> RolePermissions { get; set; }
public ICollection<User> Users { get; set; }
}
public class RolePermission : _CompanyBase
{
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int RolePermissionID { get; set; }
public Guid Id { get; set; }
[Required]
[StringLength(100, MinimumLength = 3)]
public string PermissionCode { get; set; }
public int RoleID { get; set; }
public Role Role { get; set; }
public int EntityID { get; set; }
public Entity Entity { get; set; }
}
public class Entity : _CompanyBase
{
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int EntityID { get; set; }
[Required]
[StringLength(100, MinimumLength = 3)]
public string DisplayName { get; set; }
public int EntityAreaID { get; set; }
public EntityArea EntityArea { get; set; }
}
public class EntityArea :_CompanyBase
{
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int EntityAreaID { get; set; }
[Required]
[StringLength(50, MinimumLength = 3)]
public string Name { get; set; }
public ICollection<Entity> Entities { get; set; }
}
我正在尝试将它们绑定:
dbUser = db.Users
.AsNoTracking()
.Where(x => x.UserId == UserID)
.Include(m => m.Role)
.ThenInclude(m => m.RolePermissions)
.ThenInclude(m => m.Entity)
.ThenInclude(m => m.EntityArea)
.FirstOrDefault();
但是,我确实得到了角色,我没有得到任何进一步的东西(角色权限集合、实体和区域)。从根本上说我做错了什么吗?这是一个只读查询,因此使用了 nottracking。
谢谢!
【问题讨论】:
-
只是猜测,但是制作ICollection
virtual不会改变结果吗? -
嗯,我会试试看,但不会把它变成虚拟的,只是把它改成延迟加载而不是急切?
-
你可能是对的,但如果你不想延迟加载,
this.Configuration.LazyLoadingEnabled = false;可以全局禁用它。 -
或者我们正在谈论不同的 EF 版本。是 EF Core 还是 EF 6 及以下?
-
这是 EF Core
标签: entity-framework