5

在下面的函数中,在 context.SaveChanges() 之后,实体 PropertyType 始终为空。我刚刚从使用 ObjectContext 转换为 DBContext(首先使用数据库),在更改之前,它运行良好,但现在不行。有什么我想念的吗?

我检查了 PropertyTypeID,它写得正确并且存在于数据库中。所有关系都在 db 和 edmx 文件中正确设置。生成的 .tt 文件将 PropertyType 对象显示为虚拟。这是 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();

再次感谢。

4

1 回答 1

12

您需要创建一个代理而不是使用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;
}
于 2012-12-04T21:40:57.317 回答