Базовый репозиторий ядра 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
Использование контекста в репозитории может быть неприменимо в вашем случае. Некоторые другие комментарии также важны; принимать во внимание при использовании этого кода. Возможно, вам придется изменить этот код в соответствии с вашими потребностями.