我在我的存储库中使用
return _dbContext.Groups;
,它返回我的所有组对象,但 one 对象在 TeamLeader 中返回空值字段。
这是我的小组课程
public class Group
{
[Key]
public string GroupCode { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
[ForeignKey("Application")]
public string? ApplicationCode { get; set; }
public virtual Application? Application { get; set; }
[ForeignKey("TeamLeader")]
public string TeamLeaderCode { get; set; } = string.Empty;
public virtual User? TeamLeader { get; set; }
public bool IsForChangeManagers { get; set; }
public virtual IEnumerable<User>? Members { get; set; }
}
我正在使用延迟加载
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseLazyLoadingProxies();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Group>(g =>
{
g.HasOne(g => g.TeamLeader).WithOne().HasForeignKey<Group>(g => g.TeamLeaderCode);
g.HasMany(g => g.Members).WithMany(u => u.Groups);
});
}
我也尝试过这个,但它也在该字段中返回 null
List<Group> groupList = new();
var allGroup = _dbContext.Groups;
foreach (var group in allGroup)
{
if (group.TeamLeader == null)
{
group.TeamLeader = _userRepository.GetUserByCode(group.TeamLeaderCode);
groupList.Add(group);
} else
{
groupList.Add(group);
}
}
return groupList;
找到办法了,我只需要显式调用组长属性即可
List<Group> groupList = _dbContext.Groups.ToList();
var countList = _dbContext.Groups.Count();
for (int i = 0; i < countList; i++)
{
groupList[i].TeamLeader = _userRepository.GetUserByCode(groupList[i].TeamLeaderCode);
}
return groupList;