Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 在ASP.NET Web Api上处理事务数据_C#_Design Patterns_Transactions_Asp.net Web Api_Petapoco - Fatal编程技术网

C# 在ASP.NET Web Api上处理事务数据

C# 在ASP.NET Web Api上处理事务数据,c#,design-patterns,transactions,asp.net-web-api,petapoco,C#,Design Patterns,Transactions,Asp.net Web Api,Petapoco,我想为销售点构建服务器,它将位于Web Api asp.net之上 我的计划是有一个账单管理员。 为了处理从web api post到sql server的账单,我计划使用micro ORM PetaPoco。 一张账单将在三个表中写入数据库。 PetaPoco催促我每桌有三个“POCO”。 我想在事务内部将这三个POCO写入数据库。 我如何设计我的控制器和类,使其看起来很好,也很好地工作 我应该吗 让我的控制器接受三(3)个类作为参数,这在asp.net web api上可能吗?我可以从一个请

我想为销售点构建服务器,它将位于Web Api asp.net之上 我的计划是有一个账单管理员。
为了处理从web api post到sql server的账单,我计划使用micro ORM PetaPoco。
一张账单将在三个表中写入数据库。 PetaPoco催促我每桌有三个“POCO”。
我想在事务内部将这三个POCO写入数据库。
我如何设计我的控制器和类,使其看起来很好,也很好地工作

我应该吗

  • 让我的控制器接受三(3)个类作为参数,这在asp.net web api上可能吗?我可以从一个请求反序列化三个不同的类吗
  • 让我的控制器接受一个类,然后在服务器端从该类生成三个将要写入数据库服务器的POCO?有人能把世界分成三部分吗
  • 让我的控制器有三种方法逐个过帐单独的数据(账单标题、账单付款、账单文章)? 在这种情况下,可能很难为三个单独的调用创建一个事务
  • 还有别的办法吗

  • 我肯定会选择选项2——因为您的web客户端应该不知道实现细节——也就是说,您是坚持使用一个表还是3个表对客户端来说并不重要

    控制器或服务方法如下所示(显然命名不太好-您必须根据您的域行话对其进行修改):


    您应该阅读DTO模式,它将回答您的一些问题:
    1.WebAPI支持它。
    2.这听起来像是DTO,所以这是一个很好的解决方案,因为您向消费者隐藏了持久性模型。

    3.没有必要强迫消费者打三个电话,每个电话都有自己的“基础设施”成本,所以最好是一个基础设施成本,而不是一个

    如果你发布Web API签名和POCO类的结构,有人可能会帮助设计控制器类。是tree还是point 1上的three?@Fendy three作为数字3,Google drive my crazy whit拼写校正器。你可以从这里开始:它来自WebApi的竞争对手,因此,您将一次拍摄两件事—了解DTO和WebApi替代方案:)以下是DTO的原始描述:
        public void AddBill(BillDTO bill)
        {
            //Map the DTO to your entities
            var bill1 = mapper1.Map(bill);
            var bill2 = mapper2.Map(bill);
            var bill3 = mapper3.Map(bill);
    
            //Open the transaction
            using (var scope = db.Transaction)
            {
                // Do transacted updates here
                db.Save(bill1);
                db.Save(bill2);
                db.Save(bill3);
                // Commit
                scope.Complete();
            }
        }