0
我从https://stackoverflow.com/a/14988549/294022偷了下面的代码。业务逻辑层的交易
这似乎是一个很好的抽象。但是有一个问题。如果你想结合多个服务呼叫怎么办?
这可以很好地结合DAL调用。但为了服务?有解决方案吗?
public class Foo //POCO for data access
{
//Add Attributes for Ormlite
public int Id { get; set; }
}
public class Bar //POCO for data access
{
//Add Attributes for Ormlite
public int Id { get; set; }
}
//your request class which is passed to your service
public class DeleteById
{
public int Id { get; set; }
}
public class FooBarService : MyServiceBase //MyServiceBase has resusable method for handling transactions.
{
public object Post(DeleteById request)
{
DbExec(dbConn =>
{
dbConn.DeleteById<Foo>(request.Id);
dbConn.DeleteById<Bar>(request.Id);
});
return null;
}
}
public class MyServiceBase : Service
{
public IDbConnectionFactory DbFactory { get; set; }
protected void DbExec(Action<IDbConnection> actions)
{
using (var dbConn = DbFactory.OpenDbConnection())
{
using (var trans = dbConn.OpenTransaction())
{
try
{
actions(dbConn);
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
}
}
}
我知道这个,但如何? – GorillaApe
创建一个表示UnitOfWork的接口,然后创建一个MsSql特定的实现。让你的服务类依赖于接口,然后你可以传递实现。这样你的服务可以使用当前的UnitOfWork或者开始一个新的,等等。 –
它怎么传递?参数 - 属性? – GorillaApe