Autofa c Generi c Репозиторий Сервис Несколько DBSet - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в автофе c и хранилище. Я скачал пример проекта MVC и сейчас над ним работаю. У меня есть база данных и несколько взаимосвязанных таблиц. В MVC Controller.

есть служба репо Customer. У меня есть несколько классов свойств в классе клиента.

Я хочу добавить новую запись. Но мне также нужно добавить записи во вложенные классы. Одна служба поддержки клиентов добавляется к параметру конструктивного метода.

Как получить доступ к другим таблицам в контроллере.

Каков наилучший способ для этого.

 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;
    }

1 Ответ

0 голосов
/ 14 апреля 2020

Предполагая, что все сервисы зарегистрированы в вашем файле startup.cs, начните с доступа к данным и простой записи данных. Вы не публиковали свои методы обслуживания, поэтому я собираюсь сделать черный удар по тому, что там есть.

Возможно, у вас внутри _serviceCust есть метод, который выставляет ваш список клиентов, или у него есть различные методы, такие как GetCustomerList() или CreateCustomer(Customer cust). Волшебство c услуг заключается в том, что вы можете хранить повторно используемые логи c и получать к ним доступ со своего контроллера. В этом случае лучше всего использовать службу, которая может обновлять вложенные структуры для вас в базе данных.

Если вы хотите создать клиента, запустите на своем контроллере

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

Тогда вы бы позвонили в свою службу, используя _serviceCust.CreateCustomer(bobCustomer)

Если вы хотите изучить более продвинутые методы обновления таблиц базы данных, изучите контексты транзакции . Они позволят вам поэтапно манипулировать вашей базой данных и при этом поддерживать ACIDity.

Если бы в вашем контроллере была логика c, вы могли бы сделать следующий псевдокод

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();
} 
...