【发布时间】:2018-09-10 09:38:59
【问题描述】:
我有三个类:Role、Permission 和 RolePermission(角色权限是多对多关系中的第三个表关系)
public class Role : Entity
{
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<RolePermission> RolePermissions { get; set; }
}
public class Permission : Entity
{
public string Name { get; set; }
public virtual ICollection<RolePermission> RolePermissions { get; set; }
}
public class RolePermission : Entity
{
public int RoleId { get; set; }
public int PermissionId { get; set; }
public Permission Permission { get; set; }
public Role Role { get; set; }
}
然后我使用fluentAPI 来配置关系:
对于Role:
HasMany(role => role.RolePermissions)
.WithRequired(rolePermission => rolePermission.Role)
.HasForeignKey(rolePermission => rolePermission.RoleId);
对于Permission:
HasMany(permission => permission.RolePermissions)
.WithRequired(rolePermission => rolePermission.Permission)
.HasForeignKey(rolePermission => rolePermission.PermissionId);
对于RolePermission:
HasRequired(rolePermission => rolePermission.Permission)
.WithMany(permission => permission.RolePermissions)
.HasForeignKey(rolePermission => rolePermission.PermissionId);
HasRequired(rolePermission => rolePermission.Role)
.WithMany(role => role.RolePermissions)
.HasForeignKey(rolePermission => rolePermission.RoleId);
问题是只填充了Role 对象。
【问题讨论】:
-
这个问题中的代码与建立关系有关。此问题中报告的问题与未自动加载的相关数据有关。这是两件不同的事情,彼此之间几乎没有关系。向我们展示您从何处启动查询的代码。您是否在某处错过了包含?您是否访问过(并因此延迟加载) Role nav 属性,但没有访问 Permission nav 属性?我想查看从您启动查询的位置到您检查此对象的位置的代码(根据您的屏幕截图)
-
@Flater,这是查询:
var user = _userRepository.FirstOrDefaultAsync(us => us.Email == email); var userPermissions = user.UserRoles.First().Role.RolePermissions.Select(rp => rp.Permission).ToList(); -
@Flater,是的,我必须使用 include,问题就解决了。这是解决方案,因此请将其作为答案发布以接受它。
标签: c# entity-framework ef-fluent-api