[asp.net]空的实体价值

发布时间: 2017/3/26 0:43:58
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

User 模型︰

    public class User
    {
        public int UserId { get; set; }

        public int RoleId { get; set; }

        [Required]
        public string Name { get; set; }
        [Required, DataType(DataType.EmailAddress)]
        public string Email { get; set; }
        [Required, DataType(DataType.Password)]
        public string Password { get; set; }

        public Role Roles { get; set; }
}

Roles 模型︰

public class Role
{
    public int RoleId { get; set; }
    public string Name { get; set; }

    public List<User> Users { get; set; }
}

但在视图名称中的 Role 为空......我应该做什么或数据库关系或任何其他地方,问题的症结所在?

<dt>
    @Html.DisplayNameFor(model => model.Roles.Name)
</dt>

<dd>
    @Html.DisplayFor(model => model.Roles.Name)
</dd>

解决方法 1:

你能解决这个问题,使用预先加载加载相关的实体作为您的查询,如︰

var query= context.Users.Include(u=>u.Role).Where(...).ToList();

链接我引述上面,你会发现你需要加载相关的实体的所有选项。

只是供你参考,您的实体不能满足需要延迟加载,从您的实体创建代理类的所有条件,你可以看到在这个其他链接的所有条件。您需要声明为你导航属性 virtual 懒加载,但我推荐你使用预先加载在这种情况下。在您咨询导航属性视图中的时间,DbContext 就可以处理,所以会引发异常。

更新

好,您可以创建一个重载的你 GetAll 您要加载的相关的实体在作为参数传递的方法︰

using System.Data.Entity;
//...
public virtual IQueryable<TEntity> GetAll(List<Expression<Func<TEntity, object>>> includes = null) 
{

  IQueryable<TEntity> query = _dbSet; 

  if (includes != null)
  {
     query = includes.Aggregate(query, (current, include) => current.Include(include));
  }
  return query;
}
官方微信
官方QQ群
31647020