C# 尽管使用了include,但EF6未加载导航属性

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

我拥有以下实体:

第1人-----*着装者----1地址

当试图通过调用
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.