Базовый репозиторий ядра Enityframwork с хранимой процедурой

Я новичок в ядре.Net Я создаю одно приложение со ссылкой на статью ниже.

репозиторий genric в EntityFramwork Core в статье пользователь создал асинхронную и синхронизирующую функцию с использованием универсального подхода. теперь согласно моему проекту требуется. Мне нужно использовать хранимую процедуру в некоторых местах. Может ли кто-нибудь помочь мне, как я могу интегрировать метод для вызова хранимой процедуры в общем виде.

Заранее спасибо. Omkar.

2 ответа

В этом примере, если вы хотите добавить пользовательский метод, вы можете добавить его в IBlogRepository, после чего в классе BlogRepository вы можете определить вызовы хранимых процедур.

PS: в этом примере уже есть пользовательский метод, как показано ниже:

namespace EfCoreGenericRepository.DataAccess  
{  
  public interface IBlogRepository : IGenericRepository<Blog>  
    {  
        // If you need to customize your entity actions you can put here    
        Blog Get(int blogId);  
    }  
} 

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

Отредактировано:

namespace EfCoreGenericRepository.DataAccess  
{  
  public interface IBlogRepository : IGenericRepository<Blog>  
    {  
        // If you need to customize your entity actions you can put here    
        Blog Get(int blogId);

        // For example  
        List<Blog> GetTop100Blogs();
    }  
} 

// Реализация:

namespace EfCoreGenericRepository.DataAccess  
{  
  public class BlogRepository : GenericRepository<Blog>, IBlogRepository  
  {  

    public BlogRepository(DataContext context) : base(context)  
    {  
    }  

    public Blog Get(int blogId)  
    {  
      var query = GetAll().FirstOrDefault(b => b.BlogId == blogId);  
      return query;  
    }  

    public List<Blog> GetTop100Blogs()  
    {  
      var query = context.Blogs.FromSql("EXECUTE dbo.GET_TOP_100_BLOGS_PROCEDURE").ToList(); 
      return query;  
    } 

    // and the other implementations of generic methods.

  }  
} 

GenericRepository класс в этой статье является базовым (abstract) учебный класс. Вам не нужно ничего добавлять к этому; это уже подвергает слишком много.

Вы должны наследовать ваш конкретный репозиторий (как BlogRepository в этой статье) из базового хранилища. Затем вы можете добавить любой пользовательский метод в ваш конкретный репозиторий. Да; Вы можете добавить новый метод в ваш конкретный репозиторий для вызова вашей хранимой процедуры.


Кстати, я вижу несколько проблем в этой статье. Прочитайте этот ответ для фона. Я не говорю, что код не работает; Я говорю, что это может быть проблемой в некоторых сценариях.

  • Все методы в GenericRepository класс public, Таким образом, они доступны через все конкретные хранилища, даже если они не нужны или не применимы.
  • IBlogRepository происходит от IGenericRepository, То же, что и выше. Все методы помещаются в этот интерфейс, даже если они не нужны или не применимы.
  • Dispose метод выставляется без наследования класса от IDisposable,
  • DataContext вводится в GenericRepository через конструктор и расположен в Dispose метод. Обратите внимание, что то же самое DataContext может использоваться в других случаях хранилищ. Совместное использование контекста в нескольких репозиториях является обычной практикой.

Внимательно прочитайте комментарии к этой статье. Dispose Использование контекста в репозитории может быть неприменимо в вашем случае. Некоторые другие комментарии также важны; принимать во внимание при использовании этого кода. Возможно, вам придется изменить этот код в соответствии с вашими потребностями.

Другие вопросы по тегам