DbUpdateException在使用时的延迟加载
问题描述:
删除与导航属性的实体,我有以下实体:DbUpdateException在使用时的延迟加载
public class MyEntity
{
public Guid? Id { get; set; }
public string Name { get; set; }
public virtual ApplicationUser User { get; set; }
}
而且我试图消除这种方式:
var myEntity = await db.MyEntities.FindAsync(id);
if (myEntity != null)
{
db.MyEntities.Remove(myEntity);
await db.SaveChangesAsync();
}
而且它给我这个错误:
An error occurred while saving entities that do not expose foreign key properties for their relationships
如果我手动.Include()
的导航属性,它工作正常。
我的问题是双折叠,为什么懒加载不加载任何属性是必要的,这只是工作,并且有没有一种正确的方法来删除实体,而不必手动.Include()
每一个导航属性事先?
答
正如我怀疑的那样,由于dbcontext已关闭或处于某种关闭状态,因此延迟加载不再有效。我通过切换到每个请求的单个DbContext(存储在HttpContext.Current.Items中)来修复所有问题
这是什么执行环境? ASP.NET? – Noseratio
MVC 5,我会添加标签 –
我想我发现我的问题,db可能没有任何形状来延迟加载任何东西,我做db.SaveChangesAsync()。如果我在创建一个新的数据库上下文之前这样做可以正常工作。如果有一种方法可以在没有上下文困扰导航属性值的情况下删除它,它仍然会很好。 –