与代理创建和延迟加载残疾人仍在加载子对象的实体框架(Entity Framework with Pr

2019-10-18 03:54发布

我使用波苏斯有实体框架的一些问题,我希望有人能在较高的水平告诉我,如果我看到的行为是正常的或者我需要更深入地研究它的原因。

我有一类Customer和其他CustomerType ,让Customer有一个属性Type (类型CustomerType指示型)和CustomerType具有财产Customers是集合Customer S(所有的Customer即有S型),因此,这些都是基本的导航上的关联的两端,造成POCO代码类似的属性:

public partial class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int TypeId { get; set; }
    public CustomerType Type { get; set; }
}

public partial class CustomerType
{
    public CustomerType()
    {
        this.Customers = new HashSet<CustomerType>();
    }

    public int Id { get; set; }
    public string TypeName { get; set; }

    public virtual ICollection<Customer> Customers { get; set; }
}

我已经关闭了代理的创建和惰性加载(即两个DbContext.Configuration.ProxyCreationEnabled=falseDbContext.Configuration.LazyLoadingEnabled=false ),因为它们使系列化痛苦。

正如当我从一开始预期的情况下, Customer集中, Type上它们属性默认为空。

但是,如果我得到的实例从Customer与一组.Include("Type")不仅是它装载Type的属性,但它也装载了孩子-也就是收集Customer S于每一项。

这个预期?

Answer 1:

据预计半。 在包括扩展会影响在运行SQL。 被加载(由于被包括在客户查询)那些CustomerTypes将根据CustomerType.ParentId柱被内置到对象树。

所以,如果有些侥幸既是父母和孩子在同一查询被加载后,孩子就会被塞进父。



文章来源: Entity Framework with Proxy Creation and Lazy Loading disabled is still loading child objects