C# SaveChanges实体框架后延迟加载不起作用

C# SaveChanges实体框架后延迟加载不起作用,c#,entity-framework,lazy-loading,dbcontext,C#,Entity Framework,Lazy Loading,Dbcontext,在下面的函数中,在context.SaveChanges()之后,实体PropertyType始终为null。我刚从使用ObjectContext转换到DBContext(首先使用数据库),在更改之前,它工作得很好,但现在没有。有什么我遗漏的吗 我检查了PropertyTypeID,它被正确写入并且存在于数据库中。在db和edmx文件中正确设置了所有关系。生成的.tt文件将PropertyType对象显示为虚拟对象。这是EF5 以下是代码(已删除实体属性的非重要赋值): 再次感谢。您需要创建一个

在下面的函数中,在context.SaveChanges()之后,实体PropertyType始终为null。我刚从使用ObjectContext转换到DBContext(首先使用数据库),在更改之前,它工作得很好,但现在没有。有什么我遗漏的吗

我检查了PropertyTypeID,它被正确写入并且存在于数据库中。在db和edmx文件中正确设置了所有关系。生成的.tt文件将PropertyType对象显示为虚拟对象。这是EF5

以下是代码(已删除实体属性的非重要赋值):


再次感谢。

您需要创建一个代理,而不是使用
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;
}

这解决了我的问题。但是,这样做需要在实例化上下文之后创建实体。因此,我最好手动加载引用,如编辑中所示。谢谢你的帮助!
context.Entry(transfer_detail).Reference(a => a.PropertyType).Load();
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;
}