Ele*_*uge 3 c# entity-framework
如果保存时有任何异常,下面的代码是否会回滚更改?
using (SampleEntities context = new SampleEntities())
{
//Code Omitted
context.EmpPercAdjustments.AddRange(pp);
context.SampleJobs.AddRange(sampleJobs);
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
要么
我需要使用交易吗?
using (SampleEntities context = new SampleEntities())
{
//Code Omitted
using (System.Data.Entity.DbContextTransaction tranc = context.Database.BeginTransaction( ))
{
try
{
context.EmpPercAdjustments.AddRange(pp);
context.SampleJobs.AddRange(sampleJobs);
context.SaveChanges();
tranc.Commit();
}
catch (Exception ee)
{
tranc.Rollback();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用一个优于其他优点是否有任何优势?
是的它会正确回滚.
在这种情况下,您不需要运行显式事务,因为实体框架已经创建了一个事务.
通过调用创建事务context.Database.BeginTransaction()是好的,如果你想让fe获得刚刚插入的记录的Id,就像这样:
using (SampleEntities context = new SampleEntities())
{
using (System.Data.Entity.DbContextTransaction trans = context.Database.BeginTransaction( ))
{
context.SampleJobs.Add(newJob);
context.SaveChanges();
var jobId = newJob.Id;
//do other things, then commit or rollback
trans.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在调用之后SaveChanges(),将context objects应用所做的更改(因此您可以在范围中读取数据库生成的已添加对象的ID),但它们仍然必须提交或回滚,因为只有更改dirty written.
如果您有多个可以修改上下文对象的方法,但是您希望拥有最终发言权,如果他们所做的更改都将被提交,则定义显式事务也很有用.
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |