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()方法。

浙公网安备 33010602011771号