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,分离创建问题,如果同样的记录需要在相同的上下文中再次修改,那么不变是需要在我的情况下使用的。在这里找到更多的信息;你不能把它放在两次,这就是为什么我说要考虑新的上下文。