Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-删除拆分实体未附加,且未由同一上下文实例加载_C#_Entity Framework - Fatal编程技术网

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
}