实体框架导航属性零结果

时间:2014-02-13 03:17:15

标签: asp.net-mvc entity-framework

我在用户模型和角色模型之间有一个简单的关系。

public class User {
{
    public User() {
         Roles = new HahSet<Role>();
    }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public virtual ICollection<Role> Roles { get; set; }
}

public class Role { 

    public Role()
    {
        Users = new HashSet<User>();
    }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public virtual ICollection<User> Users { get; set; }
}

在我的开发系统上,当查询user.Roles时,我得到3个角色的预期结果。部署到测试环境时,同一查询返回0角色。

我已记录并监控这两种环境。两个系统

  • 运行相同的代码库并记录相同的日志记录语句
  • 对相同的数据库(通过日志记录和SQL事件探查器)执行相同的SQL查询,因此我可以看到它从数据库中请求数据
  • 拥有所需的数据库记录
  • 能够加载用户,但测试环境不会将角色转换为user.Roles集合上的对象
  • 编辑:在开发和测试数据库上手动运行SQL查询将返回预期的结果。

尽我所能,我的环境和配置是完全相同的。

我的问题是,我可以调查哪种环境和/或配置区域来计算测试环境中发生的情况?

1 个答案:

答案 0 :(得分:1)

为了安全起见,您可以验证这两个对象..它们必须看起来像这样......

public class User {
{
    public User() {
         Roles = new HahSet<Role>();
    }
    [Key]
    public int UserId { get; set; }
    public virtual ICollection<Role> Roles { get; set; }
}

public class Role
{
[Key]
public int RoleId { get; set; }
[ForeignKey("User ")]
public int UserId { get; set; }
public User User { get; set; }
}