Шаблон репозитория и хранимая процедура - PullRequest
0 голосов
/ 17 февраля 2012

Я ищу хороший пример проектов для использования шаблона репозитория и хранимой процедуры. Я провел много раз, я не могу найти ни одного хорошего примера, который бы использовал sp для связи с шаблоном репозитория и db. Даже обычный CRUD, я все еще буду использовать SP.

Кроме того, есть ли у кого-нибудь пример для выполнения сложных данных в хранимой процедуре для кодирования в EF? Например, хранимая процедура возвращает несколько таблиц данных? Спасибо

1 Ответ

3 голосов
/ 18 февраля 2012

Я не могу найти хорошего примера использования sp для связи с шаблоном репозитория.Даже при обычном CRUD я все равно буду использовать SP.

Только подумайте о шаблоне и ваших параметрах - вы можете использовать только SP и вы хотите, чтобы объект отвечал за доступ к данным.Вам не нужен пример проекта - вам просто нужно подумать.

При реализации хранилища с помощью хранимых процедур вы закончите простым DAO (объектом доступа к данным), определяемым интерфейсом, например:

public interface IEntityDao
{
    IEnumerable<Entity> GetAll();
    Entity GetByKey(int key);
    bool Insert(Entity data);
    bool Update(Entity data);
    bool Delete(int key);
}

Это базовый интерфейс для операций CRUD в Entity постоянном классе.Каждая реализация метода будет вызывать одну хранимую процедуру для выполнения операции.Если вам понадобится какая-либо другая операция (например, некоторая фильтрация или упорядочение), вы создадите новую хранимую процедуру и выставите новую операцию, вызывающую эту хранимую процедуру.

Может быть обсуждение, если это хранилище или нет, но просто SP не предложат вам больше ничего.Например, эту часть определения практически невозможно выполнить на общем уровне:

Объекты клиента конструируют спецификации запросов декларативно и отправляют их в репозиторий для удовлетворения.

Ваш "запросСпецификация "всегда будет только параметрами, специфичными для данной хранимой процедуры и переданными вашей открытой операции.Вы не сможете декларативно определить весь запрос (если вы не передадите SQL в качестве параметра вашему SP).

Вы можете вызывать хранимые процедуры напрямую через ADO.NET или использовать импорт функций или ExecuteStoreQuery / * 1024.* в EF.EF может выполнять сложные хранимые процедуры с такими ограничениями:

  • хранимая процедура возвращает только один набор результатов.Для нескольких наборов результатов вам понадобится либо EFExtensions , либо вам придется ждать .NET 4.5, где эта функция должна быть включена * Хранимая процедура 1030 *
  • не должна возвращать другой набор результатов - это означает, что структуранабор результатов должен быть одинаковым для каждого выполнения SP (без сводок или динамического SQL, возвращающего разное количество столбцов)

Импорт функций имеет несколько небольших ограничений.Если вы будете следовать этим правилам, вы сможете создавать классы / сложные типы для каждого набора результатов, возвращаемого вашим SP.

...