ForeignKey总是空的

时间:2014-05-29 07:35:36

标签: c# entity-framework entity

我认为这是某个错误。但是哪里?我上课了。如下。我有一个表定义。用户类型,角色标识,因为有类型。

没有错误,但“def_ROLEID”和“def_COMPANYID”为空。但是ROLEID和COMPANYID不为空。哪里出错?

public class def_user: Base
    {
        [Key]
        public int USERID{ get; set; }
        public string NAME{ get; set; }
        public string USERCODE{ get; set; }

        public string PWD{ get; set; }

        public int ROLEID{ get; set; }
        [ForeignKey("ROLEID")]
        public def_table def_ROLEID { get; set; }

        public int COMPANYID{ get; set; }
        [ForeignKey("COMPANYID")]
        public def_company def_COMPANYID { get; set; }
    }

最后我的repostroy类如下。

  public virtual List<T> GetMany(Expression<Func<T, bool>> where)
        {
            return ApplyInclude().Where(where).ToList();
        }

我的方法:

 public Response<Model.def_user> List(Model.def_user usr)
        {
            var result_def_user  = new Response<Model.def_user>();
            result_def_user  .List = def_Repository.GetMany
                (
                    x =>
                    usr.USERCODE!= null ? x.USERCODE== def.USERCODE:
                    usr.PWD!= null ? x.PWD== usr.PWD :
                    usr.USERID >=0
                );
            return result_def_user ;
        }

我编辑了metod和代码。

 public void Include(params string[] paths)
    {
        _paths = paths;
    }

public virtual List<T> GetMany(Expression<Func<T, bool>> where)
    {
        return ApplyInclude().Where(where).ToList();
    }

  def_Repository.Include(new[] { "ROLID" });
  var query = def_Repository.GetMany(x => x.USERID> 0);

现在;我收到错误“在创建模型时无法使用上下文。”

我该怎么办?

1 个答案:

答案 0 :(得分:0)

使您的导航属性为延迟加载虚拟化:

[ForeignKey("ROLEID")]
public virtual def_table def_ROLEID { get; set; }
[ForeignKey("COMPANYID")]
public virtual def_company def_COMPANYID { get; set; }

如果要在一个查询中加载相关角色和公司,请使用预先加载(应在存储库GetMany方法中完成)。像

这样的东西
context.def_users.Where(...)
                 .Include(u => u.def_ROLEID)
                 .Include(u => u.def_COMPANYID)

建议阅读:Loading Related Entities in Entity Framework

注意:我建议您改进代码的命名标准。最好使用RoleIdCompanyId表示密钥,UserRoleCompany表示类名。 def_ROLEIDdef_COMPANYID是非常令人困惑的名字 - 它们看起来像ID,而不是相关的实体。请改用CompanyRole。见C# Naming Guidelines