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