Entity Framework 怎么放弃错误数据
Entity Framework 怎么放弃错误数据?
程序中我声明了一个DbContext,然后向其中添加了一些数据,这些数据可能不太符合数据库要求,
在调用SaveChanges时,就会有Exception。
这时再向这个DbContext中添加正确的数据,并调用SaveChanges时,会一直有Exception;
怎样才能丢弃第一步中引起Exception的数据,让第二步的正确数据可以正常SaveChange呀??
------解决方案--------------------使用ObjectContext.Refresh()可以重置当前的EntitySet。
方法说明参见:http://msdn.microsoft.com/zh-cn/library/bb896255.aspx
这是我学习LINQ to Entity时的笔记:http://www.cnblogs.com/Abbey/archive/2011/07/31/2122780.html
------解决方案--------------------这些数据可能不太符合数据库要求,
没有进行验证和格式处理么?
数据库操作之前进行验证和处理
------解决方案--------------------http://msdn.microsoft.com/zh-cn/library/dd395500.aspx
最好是在插入前对数据进行相关格式验证
------解决方案--------------------恩,用DetachOject可以去掉不想更新的数据,当然你得持有该数据的引用。
再多次操作之后,引用又没有保持的情况下,可以用Refresh来放弃客户端的数据,当然这样做相当于重新查询。
利用 ObjectContext.Refresh 方法,Refresh 第一参数是一个枚举:
1) RefreshMode.StoreWins 表示放弃本地数据,接受DB的数据。
2) RefreshMode.ClientWins 表示继续保持当前的数据,直到调用SaveChanges() 以当前数据更新到DB。
C# code
var confirmReject = MessageBox.Show("放弃所有修改?", "Confirm", MessageBoxButtons.OKCancel);
if (confirmReject == System.Windows.Forms.DialogResult.OK)
{
northwind.Refresh(RefreshMode.StoreWins, northwind.Customers);
northwind.AcceptAllChanges();
}
------解决方案--------------------
System.Data.Common.DbTransaction tran = null;
try
{
DBContext.Connection.Open();
tran = DBContext.Connection.BeginTransaction();
.....
DBContext.SaveChanges();
tran.Commit();
}
catch (Exception ex)
{
if (tran != null)
tran.Rollback();
throw ex;
}
------解决方案--------------------
C# code
db.Product.Attach(item);
db.ObjectStateManager.ChangeObjectState(item, EntityState.Added);