C# 实体框架-删除拆分实体未附加,且未由同一上下文实例加载
当我将关系声明为拆分表时,从实体框架中删除关系时遇到问题 基本上,我需要一些代码来检查实体是否由相同的上下文加载。下面的检查不起作用C# 实体框架-删除拆分实体未附加,且未由同一上下文实例加载,c#,entity-framework,C#,Entity Framework,当我将关系声明为拆分表时,从实体框架中删除关系时遇到问题 基本上,我需要一些代码来检查实体是否由相同的上下文加载。下面的检查不起作用 var data = new ProductItemData() { Id = pv.ProductItems[i].Id }; if (m_Context.ProductData.Where(w => w.Id == data.Id).Count() == 0) { m_Context.ProductData.Attach(data); } m_
var data = new ProductItemData() { Id = pv.ProductItems[i].Id };
if (m_Context.ProductData.Where(w => w.Id == data.Id).Count() == 0)
{
m_Context.ProductData.Attach(data);
}
m_Context.ProductData.Remove(data);
当它没有在相同的上下文中加载时,即数据是从数据库中延迟加载的,我正确地得到了这个错误
无法删除该对象,因为在中找不到该对象
ObjectStateManager
当该项位于相同的上下文中并且执行attach方法时。我得到这个错误
ObjectStateManager中已存在具有相同密钥的对象。
ObjectStateManager无法跟踪具有相同密钥的多个对象
有人知道我能做什么吗
我认为它忽略了我所做的任何检查。当我重新加载上下文时,它会很好地删除它,但在相同的上下文中,它总是转到附加代码
如果您使用.ToList,那么您将强制运行时以渴望的方式激活sql查询,谢谢
尝试:
如果要检查给定实体的实体状态,请使用更改跟踪器:
if(m_Context.Entry(someEntity).State == EntityState.Detached)
{
// entity was not added by this context or it is brand new and not added to a dbset
}
以下是以下各项的不同值:
添加:该实体正在被上下文跟踪,但在数据库中尚不存在。
已删除:该实体正被上下文跟踪并存在于数据库中,但已被标记为在下次调用SaveChanges时从数据库中删除。
分离:上下文未跟踪实体。在使用新操作符或DbSet Create方法之一创建实体后,实体立即处于此状态。
已修改:实体正在被上下文跟踪并存在于数据库中,其部分或全部属性值已被修改。
未更改:实体正在被上下文跟踪并存在于数据库中,其属性值与数据库中的值没有更改。
谢谢,这是有意义的,但是,我认为它忽略了我对上面代码所做的任何检查。当我重新加载上下文时,它会很好地删除它,但是在相同的上下文中,它总是转到附加代码,然后出错。
context.Entry(oldEntity).CurrentValues.SetValues(newEntity);
if(m_Context.Entry(someEntity).State == EntityState.Detached)
{
// entity was not added by this context or it is brand new and not added to a dbset
}