我认为这是某个错误。但是哪里?我上课了。如下。我有一个表定义。用户类型,角色标识,因为有类型。
没有错误,但“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);
现在;我收到错误“在创建模型时无法使用上下文。”
我该怎么办?
答案 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
注意:我建议您改进代码的命名标准。最好使用RoleId
,CompanyId
表示密钥,User
,Role
,Company
表示类名。 def_ROLEID
和def_COMPANYID
是非常令人困惑的名字 - 它们看起来像ID,而不是相关的实体。请改用Company
和Role
。见C# Naming Guidelines