尝试使用 EF Code First 将对象从数据库中取出时遇到一些问题。我使用的程序是 Visual Studio 2010,项目类型是 ASP.NET MVC3 项目。
现在,问题是关联对象始终为空,尽管 FK 在数据库中已正确配置。
具体场景:一个用户有一个团队(可选),一个团队有它的用户(Users.Count 可以为零)。现在,当使用某个用户登录 webapp 时,应该可以显示该团队中的其他用户。问题是登录用户的 Team 对象为空。我找到了在用户中使用外键(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.Team 为空。在数据库中,用户表应该有一个外键列 TeamId,并且用户有相应的 teamId,但 Team 始终为空。
如果有人可以看一下,我将不胜感激,因为由于这个问题,我感到非常沮丧。
问候