Изменить шаблоны 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 с открытым исходным кодом вам больше не нужно погружаться слишком глубоко в канальный уровень доступа к данным (даже если только на уровне генерации кода).