1

我想为销售点构建服务器,它将位于 Web Api asp.net 之上。我的计划是有一个账单控制器。
为了处理从 web-api post 到 sql server 的账单,我计划使用 micro ORM PetaPoco。
一张账单将被写入三张表的数据库中。PetaPoco 推动我为每张桌子准备三个“pocos”。
我想将这三个 pocos 写入事务内部的数据库。
我如何设计我的控制器和类看起来不错也很好用。

我是不是该 ?

  1. 让我的控制器接受三 (3) 个参数类,这在 asp.net web api 上是否可行?我可以从一个请求反序列化三个不同的类吗?
  2. 让我的控制器接受一个类,然后在该类的服务器端制作三个将被写入数据库服务器的 pocos ?有人可以发布将分为三个部分的课程的外观吗?
  3. 让我的控制器有三种方法来逐一发布单独的数据(账单标题、账单支付、账单文章)?在这种情况下,可能很难为三个单独的调用进行一次事务处理?
  4. 还有其他方法吗?
4

2 回答 2

2

I would definitely go with option 2 - since your web client should be agnostic of the implementation details - i.e. whether you are persisting to one table or 3 tables shouldn't really matter to the client.

The controller or the service method would look like this (obviously the naming is not great - you'll have to modify it according to your domain lingo):

    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();
        }
    }
于 2013-05-30T07:40:00.077 回答
1

您应该阅读 DTO 模式,它会回答您的一些问题:
1. WebAPI 支持它。
2. 这听起来像 DTO,所以这是一个很好的解决方案,因为您对消费者隐藏了持久性模型。
3. 强迫消费者打三个电话是没有意义的,每个电话都有自己的“基础设施”成本,所以最好有一个基础设施成本而不是一个。

于 2013-05-30T07:48:15.957 回答