gpt4 book ai didi

c# - EF Code First - 来自数据库的对象为空

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:55 25 4
gpt4 key购买 nike

尝试使用 EF Code First 从数据库中获取对象时遇到一些问题。我使用的程序是 Visual Studio 2010,项目类型是 ASP.NET MVC3 项目。

现在,问题是关联对象始终为空,尽管在数据库中正确配置了 FK。

具体场景:一个 User 有一个 Team(可选),一个 Team 有它的 Users(Users.Count 可以为零)。现在当以特定用户登录到 webapp 时,应该可以显示该团队中的其他用户。问题是登录用户的团队对象为空。我找到了一种解决方法,即在用户 (int?teamId) 中使用外键并使用此外键分配适当的团队。但是我的问题应该在不使用这种方法的情况下得到解决。我的代码:

public class Team
{
[Key]
public int Id { get; set; }
[MaxLength(100)]
public string Name { get; set; }
public virtual ICollection<User> UsersInTeam { get; set; }

public Team()
{
UsersInTeam = new List<User>();
}

public void AddUser(User user)
{
if(UsersInTeam.Contains(user))
throw new ArgumentException(String.Format("Cannot add {0} to {1} because the user is already assigned to that team", user.Name, Name));

user.Team = this;
UsersInTeam.Add(user);
}

public class User
{
public int Id { get; set; }
[Required, MaxLength(100)]
public string Email { get; set; }
[Required, MaxLength(100)]
public string Password { get; set; }
[Required, MaxLength(100)]
public string Name { get; set; }
[Required, MaxLength(100)]
public string FirstName { get; set; }
public string Mobile { get; set; }
public bool IsAdminstrator { get; set; }
public virtual Team Team { get; set; }

public User()
{
Team = new Team();
}
}

现在进行映射:

modelBuilder.Entity<Team>().HasMany(t => t.UsersInTeam).WithOptional(u => u.Team).Map(m => m.MapKey("TeamId")).WillCascadeOnDelete(false);
modelBuilder.Entity<User>().HasOptional(u => u.Team).WithMany(u => u.UsersInTeam).Map(m => m.MapKey("TeamId")).WillCascadeOnDelete(false);

所以在登录后,我有一个 User 对象,其中包含来自数据库的所有正确属性,除了 user.Team 为空。在数据库中,User 表应该有一个外键列 TeamId,用户也有相应的 teamId,但 Team 始终为 null。

如果有人可以看一下,我将不胜感激,因为这个问题让我感到非常沮丧。

问候

最佳答案

在您的查询中包括团队

Users.Include(e => e.Team)

关于c# - EF Code First - 来自数据库的对象为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com