在SaveChangesentity framework之后,延迟加载不起作用

在下面的函数中,在context.SaveChanges()之后,实体PropertyType始终为null。 我刚刚使用ObjectContext转换为DBContext(首先是数据库),在更改之前,它工作正常,现在却没有。 有什么我想念的吗?

我检查PropertyTypeID并且它被正确写入并存在于db中。 所有关系都在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 += "

" + DateTime.Now + ": Transfer initialized for property type \"" + transfer_detail.PropertyType.DisplayName + "\"."; } return transfer_detail; }

提前致谢。

编辑

我发现如果我在SaveChanges()之后添加这行代码,它就可以了。 但是,这不是理想的,我怎样才能使它默认加载实体?

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

再次感谢。

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