Ric*_*tts 5 c# entity-framework lazy-loading dbcontext
在下面的函数中,在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 += "<br /><br /><strong>" + DateTime.Now + "</strong>: Transfer initialized for property type \"" + transfer_detail.PropertyType.DisplayName + "\".";
}
return transfer_detail;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑
我发现如果我在SaveChanges()之后添加这行代码,它就可以了.但是,这并不理想,我怎样才能使它默认加载实体?
context.Entry(transfer_detail).Reference(a => a.PropertyType).Load();
Run Code Online (Sandbox Code Playgroud)
再次感谢.
Sla*_*uma 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3999 次 |
| 最近记录: |