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

标签 c# asp.net-mvc-3 entity-framework ef-code-first fluent-interface

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

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

具体场景:一个用户有一个团队(可选),一个团队有其用户(Users.Count 可以为零)。 现在,当使用特定用户登录到 Web 应用程序时,应该可以显示该团队中的其他用户。问题是登录用户的 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 对象,其中包含来自数据库的所有正确属性,但 user.Team 为空。在数据库中,User 表具有应有的外键列 TeamId,并且用户具有相应的 teamId,但 Team 始终为 null。

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

问候

最佳答案

在您的查询中包含团队

Users.Include(e => e.Team)

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

相关文章:

c# - 如何识别方法中的当前线程?

entity-framework - Entity Framework 5 符号的可用性

c# - 从 bin 以外的文件夹加载程序集

asp.net - 在asp.net mvc中提供动态角色(角色不固定,不断更新)

c# - 如何让 Entity Framework 实现模型和数据库同步

c# - 如何在 Entity Framework 中编辑对象?

c# - FirstOrDefault 函数默认值

c# - 在 C# 中将 CSV 文件与数据库进行比较的最快方法

c# - 将数组作为命令行参数传递给 Asp.Net Core

c# - 如何快速查看服务时间