延迟加载不工作的SaveChanges实体框架后(Lazy Loading Not Working

2019-08-03 13:03发布

在下面的功能,context.SaveChanges()之后,实体属性类型总是空。 我刚刚从(先用数据库)使用的ObjectContext到的DbContext转换和改变之前,它工作得很好,现在没有。 是否有什么我失踪?

我检查PropertyTypeID并且它正确地写入和存在于数据库中。 所有的关系都是正确的分贝和EDMX文件设置。 所生成的文件.TT显示属性类型对象作为虚拟的。 这是EF 5。

下面是代码(实体属性的非重要任务已被移除):

    private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID)
    {
        ListingTransferDetail transfer_detail = new ListingTransferDetail();
        transfer_detail.PropertyTypeID = PropertyTypeID;

        using (IDXEntities context = new IDXEntities())
        {
            context.ListingTransferDetails.Add(transfer_detail);
            context.SaveChanges();
            TransferProgress += "<br /><br /><strong>" + DateTime.Now + "</strong>: Transfer initialized for property type \"" + transfer_detail.PropertyType.DisplayName + "\".";
        }

        return transfer_detail;
    }

提前致谢。

编辑

我发现,如果我添加的SaveChanges(之后这行代码),它的工作原理。 然而,这并不理想,我怎样才能让它在默认加载的实体?

context.Entry(transfer_detail).Reference(a => a.PropertyType).Load();

再次感谢。

Answer 1:

您需要创建一个代理,而不是使用new ,以使延迟加载的工作:

private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID)
{
    using (IDXEntities context = new IDXEntities())
    {
        ListingTransferDetail transfer_detail =
            context.ListingTransferDetails.Create();
        transfer_detail.PropertyTypeID = PropertyTypeID;

        context.ListingTransferDetails.Add(transfer_detail);
        context.SaveChanges();

        //...

        // the following triggers lazy loading of PropertyType now
        var something = transfer_detail.PropertyType.SomeProperty;
    }

    return transfer_detail;
}


文章来源: Lazy Loading Not Working After SaveChanges Entity Framework