The ForeignKey always Null

本文关键字:Null always ForeignKey The | 更新日期: 2023-09-27 18:05:46

我想这是一个错误的地方。但是在哪里?我有一节课。如下。我有一个表定义。用户类型,角色身份,如有类型

没有错误,但是"def_ROLEID"answers"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; }
    }

最后我的repository类如下。

  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 ;
        }

我编辑方法和代码。

 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);

;我得到错误"上下文不能被使用,而模型正在创建";

我该怎么办?

The ForeignKey always Null

为延迟加载设置虚拟导航属性:

[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)

建议阅读:在实体框架中加载相关实体

注意:我建议您改进代码的命名标准。最好使用RoleIdCompanyId作为键,使用UserRoleCompany作为类名。def_ROLEIDdef_COMPANYID是非常令人困惑的名字——它们看起来像id,而不是相关的实体。使用CompanyRole代替。参见c#命名指南