C# 尽管使用了include,但EF6未加载导航属性
我拥有以下实体: 第1人-----*着装者----1地址 当试图通过调用C# 尽管使用了include,但EF6未加载导航属性,c#,sql,.net,entity-framework,entity-framework-6,C#,Sql,.net,Entity Framework,Entity Framework 6,我拥有以下实体: 第1人-----*着装者----1地址 当试图通过调用PersonRepository.GetPersonen(…)加载具有PersonalAddress的人员时,我只获取PersonalN(带有已填写的Id、名称、Vorname),但获取空PersonalAddresse 我已经确定,数据库中有一个关于这个人的条目,关于这个人物的条目和地址。 EF生成以下SQL(没有连接或任何内容的简单SQL): 实体: public partial class Person { [
PersonRepository.GetPersonen(…)
加载具有PersonalAddress的人员时,我只获取PersonalN(带有已填写的Id、名称、Vorname),但获取空PersonalAddresse
我已经确定,数据库中有一个关于这个人的条目,关于这个人物的条目和地址。
EF生成以下SQL(没有连接或任何内容的简单SQL):
实体:
public partial class Person
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Person()
{
this.PersonAdresse = new HashSet<PersonAdresse>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Vorname { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<PersonAdresse> PersonAdresse { get; set; }
}
public partial class PersonAdresse
{
public int Id { get; set; }
public int PersonId { get; set; }
public int AdresseId { get; set; }
public virtual Adresse Adresse { get; set; }
public virtual Person Person { get; set; }
}
public partial class Adresse
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Adresse()
{
this.PersonAdresse = new HashSet<PersonAdresse>();
}
public int Id { get; set; }
public string Strasse { get; set; }
public string Ort { get; set; }
public int Plz { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<PersonAdresse> PersonAdresse { get; set; }
}
我将建议您对实体框架实体使用强类型,以避免在加载时混淆EF。我不知道为什么,但在使用接口而不是像List这样的集合类型时遇到了问题 如果我错了,或者遗漏了一些东西,请在EF实体中使用集合接口时给我一些注意事项,以便我自我改进 为了回答您的问题,您可以使用下面的代码行全局禁用延迟加载
context.Configuration.LazyLoadingEnabled = false;
这是因为您可能没有定义Person和PersonalAddress之间的FK关系。默认情况下,它将在Id=>Id上加入,我相信,所以您必须告诉EF Person.Id->personaddress.PersonId 否则,可能是因为您正在执行AsQueryable()。DbSet已经可以使用其他逻辑进行查询,因此将其更改为:
this.Context.Set<Person>()... instead of that GetQuery call.
this.Context.Set()。。。而不是GetQuery调用。
什么是context.GetQuery
?我在原始问题中添加了GetQuery方法的代码:)这是一种相当复杂的方法,只需执行返回这个.Set()代码>:)似乎你必须执行。包括(q=>q.personaldesse.选择(y=>y.Adresse))
。查看@DanDumitru我已经尝试将它包含在Select中,但不幸的是它仍然没有被加载:(惰性加载已经被禁用,不幸的是,它仍然没有被加载
public IQueryable<T> GetQuery<T>() where T : class
{
return (IQueryable<T>)this.Set(typeof(T)).AsQueryable();
}
context.Configuration.LazyLoadingEnabled = false;
this.Context.Set<Person>()... instead of that GetQuery call.