Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

  • Чтобы убедиться, что никакие запросы не могут быть успешно выполнены без предоставления Account (есть много способов обойти DAL по умолчанию через GetPaged @where Например, пункт) вам, вероятно, придется внести изменения на слое SQL. Эти шаблоны расположены в /DataAccessLayer.*Client/ папки. Предполагая, что вы используете SQL Server, файл, который генерирует 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.

Мой общий совет заключается в том, что, хотя Nettiers and Codesmith были инструментами, выбранными для создания дал, несколько лет назад я не мог бы порекомендовать идти по этому пути в наши дни. С эволюцией структуры сущности Microsoft и Nhibernate с открытым исходным кодом, вам не нужно больше уклоняться от сантехнического уровня, даже на уровне генерации кода).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top