我之前和Grails一样在Grails工作,和Spring一样,默认情况下服务方法是事务性的,如果需要,我们可以通过注释更改它,但现在我在ASP.net工作,我想知道是否有类似的东西。 或者我们必须明确地打开事务并在每个方法结束时关闭它。我正在使用实体框架......
答案 0 :(得分:1)
使用EntityFramework,当您在SaveChanges
实例上调用SaveChangesAsync
(或DbContext
)时,所有待处理数据存储操作都将在单个工作单元(事务)中发生。 / p>
如果要将工作拆分为多个事务,则每次要提交事务时都需要调用SaveChanges
(或异步等效项)。
答案 1 :(得分:1)
这是关于EF交易的非常好的文章 Working with Transactions (EF6 Onwards)
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Transactions;
namespace TransactionsExamples
{
class TransactionsExample
{
static void StartOwnTransactionWithinContext()
{
using (var context = new BloggingContext())
{
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
context.Database.ExecuteSqlCommand(
@"UPDATE Blogs SET Rating = 5" +
" WHERE Name LIKE '%Entity Framework%'"
);
var query = context.Posts.Where(p => p.Blog.Rating >= 5);
foreach (var post in query)
{
post.Title += "[Cool Blog]";
}
context.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception)
{
dbContextTransaction.Rollback();
}
}
}
}
}
}