Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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# 是否删除实体5.0上下文中的挂起更改?_C#_Linq To Entities - Fatal编程技术网

C# 是否删除实体5.0上下文中的挂起更改?

C# 是否删除实体5.0上下文中的挂起更改?,c#,linq-to-entities,C#,Linq To Entities,假设我有一个类似这样的代码 using (DAL.MyContext db = new DAL.MyContext()) { foreach (var item in UpdatedValues) { try { switch (item.Status) { case Enums.Status.Delete: //stuff

假设我有一个类似这样的代码

using (DAL.MyContext db = new DAL.MyContext())
{
   foreach (var item in UpdatedValues)
   {
      try
      {
          switch (item.Status)
          {
                case Enums.Status.Delete:
                   //stuff
                   break;
                case Enums.Status.Updated:
                   //stuff
                   break;
                case Enums.Status.Added:
                   //stuff
                   break;
          }

          db.SaveChange(); //crashing here
      }
      catch(Exception ex)
      {
         tools.log(ex);
         /*
              how to remove the last action so the for each can continue?
         */
      }
   }
}
我想从上下文中删除最后一个更改

为什么?

如果存在异常,下一个更改也将引发异常,因为上一个异常不起作用,但仍在“上下文”中,因此它将再次尝试保存


这可能吗?

除非有人发现这不“合适”,否则这似乎可以解决我的问题

在catch中,在查看了
System.Data.Entity.Internal.InternalEntityEntry.State
5.0版的
ILSpy
之后,我只需要

    internal static void UndoContextChange(DB_Context db)
    {
        foreach (var item in db.ChangeTracker.Entries())
        {
            if (item.State == System.Data.EntityState.Modified)
            {
                item.State = System.Data.EntityState.Unchanged;
            }
            else if (item.State == System.Data.EntityState.Deleted)
            {
                item.State = System.Data.EntityState.Unchanged;
                item.CurrentValues.SetValues(item.OriginalValues); //just in case
            }
            else if (item.State == System.Data.EntityState.Added)
            {
                item.State = System.Data.EntityState.Detached;
            }
        }        
    }

没有分离方法:-( 但实体国家可以改变 请参阅枚举

// Type: System.Data.EntityState
public enum EntityState
{
Detached = 1,
Unchanged = 2,
Added = 4,
Deleted = 8,
Modified = 16,
}

//See
Context.Entry(poco).State = state;

否则,只需更新上下文。通常是更好的方法。

要理解您想要什么有点困难。foreach将继续更新值中的下一项。您可以发布更多内容吗?@JonnyPiazzi,我更新了我的question@philsoady,我现在的问题是,当抛出错误时,哪一个最好分离还是保持不变,detached确实会从条目列表中删除该对象,但保持不变。这取决于上下文内容的未来使用。find()将使用仍然附加的内容。Local()仍然使用附加的内容。@ PysOffice,分离创建问题,如果同样的记录需要在相同的上下文中再次修改,那么不变是需要在我的情况下使用的。在这里找到更多的信息;你不能把它放在两次,这就是为什么我说要考虑新的上下文。