首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET Framework >

Entity Framework 如何放弃异常数据

2012-08-08 
Entity Framework 怎么放弃错误数据Entity Framework 怎么放弃错误数据?程序中我声明了一个DbContext,然后

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); 

热点排行