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);
;我得到错误"上下文不能被使用,而模型正在创建";
我该怎么办?
为延迟加载设置虚拟导航属性:
[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)
建议阅读:在实体框架中加载相关实体
注意:我建议您改进代码的命名标准。最好使用RoleId
、CompanyId
作为键,使用User
、Role
、Company
作为类名。def_ROLEID
和def_COMPANYID
是非常令人困惑的名字——它们看起来像id,而不是相关的实体。使用Company
和Role
代替。参见c#命名指南