Linq to Entities保存数据的做法

利用.Edmx类型实现LINQ

查询数据的方法
 private MvcApp.Models.TASKLISTDBEntities db = new TASKLISTDBEntities();
 var tasks = from t in db.Tasks
             orderby t.EntryDate
             descending
             select t;


插入数据的方法
 private MvcApp.Models.TASKLISTDBEntities db = new TASKLISTDBEntities();
 Tasks newTask = new Tasks();
 newTask.Task = description;
 newTask.IsCompleted = false;
 newTask.EntryDate = DateTime.Now;
 db.AddToTasks(newTask);
 db.SaveChanges();

程序需要用到连续保存多条数据,代码示意如下:

string[] auditors = ……;
foreach (string each in auditors)
{
    ...

    db.AddToAuditResult(ar);
}
db.SaveChanges();


按照以上的方法,在循环第二次执行到SaveChanges()方法的时候,会出现异常:

引用无法创建类型为“结束类型”的常量值。此上下文仅支持基元类型(“例如 Int32、String 和 Guid”)。

解决方法:

foreach (string each in auditors)
{
    ...
    db.AddToAuditResult(ar);
    db.SaveChanges(false);
}
_db.AcceptAllChanges();

每次执行完AddTo……方法后调用SaveChanges()方法,但传入“false”参数,最后在循环体外部调用AcceptAllChanges()方法即可。

这个方式其实常常被用来完成代码中的Transaction(事务)提交,在每次操作后SaveChanges()方法,但传入“false”参数,Entity Framework会保存当前对象的状态信息,但不会提交到数据库,直到显式的调用AcceptAllChanges()方法。只调用SaveChanges()方法,不传入任何参数,则默认会隐式的调用AcceptAllChanges()方法。

posted @ 2010-09-20 16:12  jinbo2000  阅读(1120)  评论(0)    收藏  举报