C# EF6,延迟加载未按预期工作
使用EF 6,在模型中将启用的C# EF6,延迟加载未按预期工作,c#,.net,entity-framework,linq,entity-framework-6,C#,.net,Entity Framework,Linq,Entity Framework 6,使用EF 6,在模型中将启用的延迟加载设置为True。下面是我的问题的一个例子: var agent = context.AgentDetail.Where(a => a.Agent.GroupCode == "1234"); 运行将返回5个结果。如果之后我运行(仅用于测试) 我得到一个空引用异常,因为Agent是null 以下是我的实体: public partial class AgentDetail : Entity<int> { pub
延迟加载设置为True
。下面是我的问题的一个例子:
var agent = context.AgentDetail.Where(a => a.Agent.GroupCode == "1234");
运行将返回5个结果。如果之后我运行(仅用于测试)
我得到一个空引用异常,因为Agent
是null
以下是我的实体:
public partial class AgentDetail : Entity<int>
{
public Nullable<System.DateTime> Date { get; set; }
public string Name { get; set; }
public decimal Balance { get; set; }
...
public virtual Agent Agent { get; set; }
}
public partial class Agent : Entity<int>
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Agent()
{
this.AgentAspNetUsers = new HashSet<AgentAspNetUsers>();
this.AgentDetail = new HashSet<AgentDetail>();
}
public string GroupCode { get; set; }
...
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<AgentAspNetUsers> AgentAspNetUsers { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<AgentDetail> AgentDetail { get; set; }
}
公共部分类代理详细信息:实体
{
公共可空日期{get;set;}
公共字符串名称{get;set;}
公共十进制余额{get;set;}
...
公共虚拟代理{get;set;}
}
公共部分类代理:实体
{
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2214:DoNotCallOverridableMethodsInConstructors”)]
公职人员()
{
this.AgentAspNetUsers=新HashSet();
this.AgentDetail=new HashSet();
}
公共字符串组代码{get;set;}
...
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2227:CollectionPropertiesShouldBreadOnly”)]
公共虚拟ICollection AgentAspNetUsers{get;set;}
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2227:CollectionPropertiesShouldBreadOnly”)]
公共虚拟ICollection代理详细信息{get;set;}
}
那么,它怎么能在第一次查询中给出5个结果呢?我不知道这里出了什么问题,如果有任何帮助,我将不胜感激。尝试定义实体之间的关系。如果您的延迟加载已启用,它应该可以工作。来自
必须使用公共访问权限声明自定义数据类
自定义数据类不能被密封
自定义数据类不能是抽象的
自定义数据类必须具有没有参数的公共或受保护构造函数。如果希望使用CreateObject方法为POCO实体创建代理,请使用不带参数的受保护构造函数。调用CreateObject方法并不保证代理的创建:POCO类必须遵循本主题中描述的其他要求李>
由于代理类实现了这些接口,因此该类无法实现IEntityWithChangeTracker或IEntityWithRelationships接口
ProxyCreationEnabled选项必须设置为true
每个导航属性必须声明为public、virtual(在Visual Basic中可重写)和not sealed(在Visual Basic中不可重写)get访问器。自定义数据类中定义的导航属性在概念模型中必须具有相应的导航属性。有关更多信息,请参见加载相关POCO实体
在你的课堂上检查这一点。在粘贴的代码AgentDetail
中,没有公共/受保护的构造函数 显示,您的实体,用于实体代理中的延迟加载应该是虚拟的。@BWA刚刚添加了它们。看看,也许会有帮助you@BWA在我发布问题之前,我已经看过了这些,而且我正在首先使用数据库。它是否正在进行快速加载?你能详细说明一下吗,请?简单的关系EF可以从导航中推断出来properties@Antrim我的意思是将[ForeignKey(“您的对象”)]添加到代理详细信息表中。具有复杂getter(无法在LinqToSql中转换)的属性是否会阻止POCO代理和LazyLoading?
public partial class AgentDetail : Entity<int>
{
public Nullable<System.DateTime> Date { get; set; }
public string Name { get; set; }
public decimal Balance { get; set; }
...
public virtual Agent Agent { get; set; }
}
public partial class Agent : Entity<int>
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Agent()
{
this.AgentAspNetUsers = new HashSet<AgentAspNetUsers>();
this.AgentDetail = new HashSet<AgentDetail>();
}
public string GroupCode { get; set; }
...
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<AgentAspNetUsers> AgentAspNetUsers { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<AgentDetail> AgentDetail { get; set; }
}