关于对Nettiers修改的建议
-
10-10-2019 - |
题
我正在评估我的下一个项目。
问题是:我的架构中的每个表都有一个字段帐户ID。对于DAL的每个请求,我希望这是通过accountId并将其用作查询中的过滤器的要求。
如果生成了使用此Paramater的额外过载,则可以接受。
我怀疑该功能不是内置的,因此任何人都可以提供有关从模板的修改以添加它的任何建议吗?
解决方案
一旦您知道自己生成的类迷宫的方式,修改Nettiers模板就不困难了,但通常非常乏味且非常容易出错。
我的第一个假设是,您要生成的数据库要么只有几张表,要么是不合同的 - 否则,拥有一个是没有意义的 帐户ID 每个表中的列。如果是较晚的,结构不能归一化,则认为将基于数据库外键(包括深载)获得所有构建的IT导航属性是一个相当大的变化 帐户ID 筛选。
另外,您提到添加包含的过载 帐户ID 将是一个可以接受的解决方案。但是,这将使现有的Nettiers超载不需要 帐户ID 任何DAL消费者的参数...
无论如何,这是您需要考虑修改的一些领域的摘要:
为了确保不提供AccountID的问题无法成功执行(有很多方法可以通过违约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和Codesmith是几年前建造Dals的选择工具,但这些天我不建议您走这条路。随着微软实体框架和开源Nhibernate的演变,您不再需要太深地涉足数据访问管道层(即使仅在代码生成级别)。