Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 委托方法的Dapper事务_C#_.net_Dapper - Fatal编程技术网

C# 委托方法的Dapper事务

C# 委托方法的Dapper事务,c#,.net,dapper,C#,.net,Dapper,我正在使用dapper和repository模式。下面是单个存储库插入的代码。我需要使用事务调用服务层中的2个或更多存储库(在savecustomer方法中)。如何为以下方法应用事务处理 Protected void Execute(Action<IDbConnection> query) { using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDB"]

我正在使用dapper和repository模式。下面是单个存储库插入的代码。我需要使用事务调用服务层中的2个或更多存储库(在savecustomer方法中)。如何为以下方法应用事务处理

Protected void Execute(Action<IDbConnection> query) {
      using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDB"].ConnectionString))
        {
            query.Invoke(db);
        }
    }

如果您想将事务扩展到存储库之外,请考虑使用UNITOFWORKS。详细代码可在此处找到:

使用此代码,您可以跨多个存储库跨事务,如下所示:

using(DalSession dalSession = new DalSession())
{
    UnitOfWork unitOfWork = dalSession.UnitOfWork;
    unitOfWork.Begin();
    try
    {
        //Your database code here
        repository1.DoThis();
        repository2.DoThat();

        unitOfWork.Commit();
    }
    catch
    {
        unitOfWork.Rollback();
        throw;
    }
}

您还可以在此处使用Dapper获得通用存储库的示例代码:

是否可以将myrepository类设置为通用类,因为您正在为存储库使用密封类……如果可能,需要更改什么?请让我知道链接答案中的代码只是一个想法。它可以根据您的需要进行更改。所以,是的,它可能是通用的,以防您希望以这种方式实现它。唯一重要的是,存储库应该接受UoW作为DI。其他实施细节由您决定。
using(DalSession dalSession = new DalSession())
{
    UnitOfWork unitOfWork = dalSession.UnitOfWork;
    unitOfWork.Begin();
    try
    {
        //Your database code here
        repository1.DoThis();
        repository2.DoThat();

        unitOfWork.Commit();
    }
    catch
    {
        unitOfWork.Rollback();
        throw;
    }
}