Советы относительно модификации NetTiers - PullRequest
3 голосов
/ 15 декабря 2010

Я оцениваю использование NetTiers для моего следующего проекта.

Проблема: каждая таблица в моей схеме имеет поле AccountId.При каждом запросе к DAL я хочу, чтобы требованием было пропускание AccountId и его использование в качестве фильтра в запросе.

Было бы приемлемо, если бы была создана дополнительная перегрузка, которая использовала этот параметр.

Я подозреваю, что эта функция не встроена, поэтому кто-нибудь может посоветовать, с чего начать модификацию шаблонов, чтобы добавить ее?

1 Ответ

3 голосов
/ 04 апреля 2011

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

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

Кроме того, вы упоминаете, что добавление перегрузок, содержащих AccountId , будет приемлемым решением.Однако это приведет к тому, что существующие перегрузки NetTiers, для которых не требуется параметр AccountId , потребителям DAL ...

В любом случае, вот краткий обзор некоторых областей, которые вам нужно посмотретьв изменение:

  • Чтобы убедиться, что никакие запросы не могут быть успешно выполнены без предоставления AccountId (существует множество способов обойти DAL по умолчанию, например, с помощью предложения GetPaged @where), вывероятно, придется вносить изменения на уровне SQL.Эти шаблоны находятся в папках /DataAccessLayer.*Client/.Предполагая, что вы используете сервер sql, файл, который генерирует Sql (/DataAccessLayer.SqlClient/StoredProcedureProvider.cst), можно изменить, чтобы всегда передавать параметр @AccountId.

  • Это приведет к изменениям в связанных файлах, таких как /DataAccessLayer.SqlClient/SqlEntityProviderBase.generated.cst и /DataAccessLayer/EntityProviderBaseCore.generated.cst и, вероятно, /DataAccessLayer/EntityProviderBaseCoreClass.generated.cst.

  • Это, в свою очередь, приведет к изменениям на уровне сущности (/Entities/), таких как EntityBaseCore.generated.cst и EntityInstanceBase.generated.cst.

MyОбщий совет заключается в том, что хотя NetTiers и CodeSmith были инструментами выбора для создания DAL несколько лет назад, я не мог рекомендовать идти по этому пути в наши дни.С развитием Microsoft Entity Framework и NHibernate с открытым исходным кодом вам больше не нужно погружаться слишком глубоко в канальный уровень доступа к данным (даже если только на уровне генерации кода).

...