Шаблон репозитория в C # без Entity Framework - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть новый проект, который требует от меня подключения к Oracle 9i.Я хочу использовать шаблон репозитория (в котором я новичок) для организации своего кода.Я буду использовать некоторые хранимые процедуры для некоторых запросов.

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

Пожалуйста, проверьте мой код ниже и дайте мне знать, правильно ли я делаю.У меня такое чувство, что я нет.

Я пытался читать другие сообщения на ту же тему, но безуспешно.

public interface IDeliveryRepository : IDisposable
{
    IEnumerable<Delivery> GetDeliveries();
    Task GetDelivery(int id);
    void Insert(Delivery delivery);
    void Delete(Delivery delivery);
    void Update(Delivery delivery);
}

Репозиторий:

public class DeliveryRepository: IDeliveryRepository
{
        public Delivery GetDelivery(int id)
        {
            Delivery delivery = null;
            var sql = "SELECT d.id , o.owner_id, o.name FROM delivery d JOIN owner o on o.id = d.owner_id where id = :t";

            using (var con = new OracleConnection(AppConfig.CALL_CENTER_CONNECTION_STRING))
            {
                con.Open();

                using (var cmd = new OracleCommand(sql, con))
                {
                    cmd.BindByName = true;
                    cmd.Parameters.Add("t", id);

                    using (var oraReader = cmd.ExecuteReader())
                    {
                        while (oraReader.Read())
                        {
                            delivery = new Delivery
                            {
                                Id = oraReader.GetString(oraReader.GetOrdinal("id")),
                                Owner = new Owner
                                {
                                    Id = oraReader.GetString(oraReader.GetOrdinal("owner_id")),
                                    Name = oraReader.GetString(oraReader.GetOrdinal("name"))
                                }
                            };
                        }
                    }
                }
            }

            return delivery;
        }

.,,,.

1 Ответ

0 голосов
/ 18 февраля 2019

Вам не нужно делать свой ID хранилища одноразовым, и для использования Task вы должны реализовать весь свой класс с помощью Асинхронной модели программирования .Ниже я обновил ваш код, который должен приблизить вас к базовому сценарию компиляции, который вы затем сможете расширить.

 // Removed the IDisposable interface
 public interface IDeliveryRepository
 {
     IEnumerable<Delivery> GetDeliveries();

     // Changed the below from a Task to a Delivery as the return type. To use Task, 
     // your entire implementation should be asynchronous.
     Delivery GetDelivery(int id);
     void Insert(Delivery delivery);
     void Delete(Delivery delivery);
     void Update(Delivery delivery);
 }

 public class DeliveryRepository: IDeliveryRepository
 {
     public Delivery GetDelivery(int id)
     {
         Delivery delivery = null;
         var sql = "SELECT d.id , o.owner_id, o.name FROM delivery d JOIN owner o on o.id = d.owner_id where id = :t";
         using (var con = new OracleConnection(AppConfig.CALL_CENTER_CONNECTION_STRING))
         {
             con.Open();
             using (var cmd = new OracleCommand(sql, con))
             {
                 cmd.BindByName = true;
                 cmd.Parameters.Add("t", id);
                 using (var oraReader = cmd.ExecuteReader())
                 {
                     while (oraReader.Read())
                     {
                         delivery = new Delivery
                         {
                             Id = oraReader.GetString(oraReader.GetOrdinal("id")),
                             Owner = new Owner
                                {
                                 Id = oraReader.GetString(oraReader.GetOrdinal("owner_id")),
                                 Name = oraReader.GetString(oraReader.GetOrdinal("name"))
                             }
                         };
                     }
                 }
             }
         }
         return delivery;
     }

   public void Insert(Delivery delivery)
   {
       /// Add your code here 
       throw new NotImplementedException();
   }


   public void Delete(Delivery delivery);
   {
       /// Add your code here 
       throw new NotImplementedException();
   }

   public void Update(Delivery delivery);
   {
       /// Add your code here 
       throw new NotImplementedException();
    }

    public IEnumerable<Delivery> GetDeliveries();
    {
       /// Add your code here 
       throw new NotImplementedException();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...