使用AngularJS和ASP.NET Web API进行事务处理
我正在尝试使用AngularJS和ASP.NET Web API创建一个小应用程序。现在,该应用程序由两个实体组成,即唱片集和歌曲。歌曲实体将具有唱片集实体的引用 现在我想知道什么是实现交易的正确方法,这样当一张专辑被保存时,与该专辑相关的所有歌曲也都会被保存 我还想知道WebAPI中的POST方法如何处理歌曲数组(作为JSON传递)使用AngularJS和ASP.NET Web API进行事务处理,angularjs,transactions,asp.net-web-api2,Angularjs,Transactions,Asp.net Web Api2,我正在尝试使用AngularJS和ASP.NET Web API创建一个小应用程序。现在,该应用程序由两个实体组成,即唱片集和歌曲。歌曲实体将具有唱片集实体的引用 现在我想知道什么是实现交易的正确方法,这样当一张专辑被保存时,与该专辑相关的所有歌曲也都会被保存 我还想知道WebAPI中的POST方法如何处理歌曲数组(作为JSON传递) [ResponseType(typeof(AlbumSong))] 公共异步任务PostMoveSong(AlbumSong AlbumSong) { 如果(!M
[ResponseType(typeof(AlbumSong))]
公共异步任务PostMoveSong(AlbumSong AlbumSong)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
db.AlbumSongs.Add(albumSong);
等待db.saveChangesSync();
返回CreatedAtRoute(“DefaultApi”,新的{id=albumSong.id},albumSong);
}
有人能告诉我这件事吗。
谢谢:)您可以使用
ActionFilter
将所有请求包装到事务中。大概是这样的:
public class TransactionPerRequest : IActionFilter, IDisposable
{
private TransactionScope transaction;
private bool isSuccess = false;
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
transaction = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted });
}
void IResultFilter.OnResultExecuted(ResultExecutedContext filterContext)
{
var code = filterContext.HttpContext.Response.StatusCode;
isSuccess = code >= 200 && code <= 399;
}
public void Dispose()
{
if (transaction != null)
{
if (isSuccess)
{
transaction.Complete();
}
transaction.Dispose();
}
}
公共类TransactionPerRequest:IActionFilter,IDisposable
{
私人交易范围交易;
private bool issucess=false;
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
事务=新事务范围(
TransactionScopeOption。必需,
新事务选项{IsolationLevel=IsolationLevel.ReadUncommitted});
}
void IResultFilter.OnResultExecuted(ResultExecutedContext筛选器上下文)
{
var code=filterContext.HttpContext.Response.StatusCode;
isSuccess=code>=200&&code您可以使用ActionFilter
将所有请求包装到事务中。类似如下:
public class TransactionPerRequest : IActionFilter, IDisposable
{
private TransactionScope transaction;
private bool isSuccess = false;
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
transaction = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted });
}
void IResultFilter.OnResultExecuted(ResultExecutedContext filterContext)
{
var code = filterContext.HttpContext.Response.StatusCode;
isSuccess = code >= 200 && code <= 399;
}
public void Dispose()
{
if (transaction != null)
{
if (isSuccess)
{
transaction.Complete();
}
transaction.Dispose();
}
}
公共类TransactionPerRequest:IActionFilter,IDisposable
{
私人交易范围交易;
private bool issucess=false;
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
事务=新事务范围(
TransactionScopeOption。必需,
新事务选项{IsolationLevel=IsolationLevel.ReadUncommitted});
}
void IResultFilter.OnResultExecuted(ResultExecutedContext筛选器上下文)
{
var code=filterContext.HttpContext.Response.StatusCode;
isSuccess=code>=200&&code