簡體   English   中英

Autofac 通用存儲庫服務多個 DBSet

[英]Autofac Generic Repository Service Multiple DBSet

我是 Autofac 和存儲庫的新手。 我下載了一個 MVC 示例項目,我正在研究它。 我有一個數據庫和幾個相互關聯的表。 MVC Controller中有一個Customer回購服務。

我在客戶 class 中有幾個屬性類。

我想添加一條新記錄。 但我還需要向嵌套類添加記錄。 在構造方法的參數中添加了一項客戶服務。

如何訪問 controller 中的其他表。

什么是最好的方法。

 private readonly IService<SubCustomer> _serviceSubCust;
    private readonly IService<Customer> _serviceCust;
    private readonly IService<Document> _serviceDoc;
    private readonly int _pageSize;

    public DocumentTransactionController(
        IService<SubCustomer> serviceSubCust,
        IService<Customer> serviceCust,
        IService<Document> serviceDoc)
    {
        _serviceCust = serviceCust;
        _serviceSubCust = serviceSubCust;
        _serviceDoc = serviceDoc;
        _pageSize = 10;
    }

假設所有服務都在你的 startup.cs 中注冊,從數據訪問和簡單的數據寫入開始。 您沒有發布您的服務方法,所以我要對其中的內容進行黑匣子測試。

也許您的_serviceCust中有一個公開您的客戶列表的方法,或者它有各種方法,例如GetCustomerList()CreateCustomer(Customer cust) 服務的神奇之處在於您可以存儲可重用邏輯並從 controller 訪問它。 在這種情況下,服務的最佳用途是可以為您更新數據庫中的嵌套結構的方法。

如果你想創建一個客戶,從你的 controller 開始

var bobCustomer= new Customer()
    {
         Name = "Bob",
         Profession = "Builder",
         Document = docObject, //you need a prepared document object here   
    };

然后您將使用_serviceCust.CreateCustomer(bobCustomer)調用您的服務

如果您想了解更新數據庫表的更高級方法,請查看事務上下文 它們將允許您逐個操作您的數據庫並仍然保持 ACIDity。

但是,如果您的 controller 中必須有邏輯,則可以執行以下偽代碼

using(var ctx = new ContextTransaction()){
    var customer = new Customer();//...create customer object...
    _serviceCust.Update(customer);
    ctx.SaveChanges();
    var sub = new SubCustomer();
    sub.ParentCustomer = customer.Id; //use the customer id as a foreign key for your subcustomer
    _serviceSubCust.Update(sub);
    ctx.SaveChanges();
    //use the subcustomer id as a foreign key for your other nested classes, so on so forth...
    ctx.Commit();
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM