我在为我的下一个项目使用NetTiers进行评估。关于修改NetTiers的建议
问题是: 我的模式中的每个表都有一个AccountId字段。随着对DAL的每个请求,我希望它成为AccountId被传递并用作查询中的过滤器的要求。
如果使用此参数产生了额外的重载,那将是可以接受的。
我怀疑这个功能是不是内置的,所以任何人都可以提供任何建议,从哪里开始修改模板来添加它?
我在为我的下一个项目使用NetTiers进行评估。关于修改NetTiers的建议
问题是: 我的模式中的每个表都有一个AccountId字段。随着对DAL的每个请求,我希望它成为AccountId被传递并用作查询中的过滤器的要求。
如果使用此参数产生了额外的重载,那将是可以接受的。
我怀疑这个功能是不是内置的,所以任何人都可以提供任何建议,从哪里开始修改模板来添加它?
修改NetTiers模板并不困难,一旦你知道自己生成的类的迷宫的方式,但它通常很繁琐,而且很容易出错。
我的第一个假设是,您生成的数据库要么只有几个表,要么是非规格化的 - 否则在每个表中都有一个AccountId列是没有意义的。如果是后者且结构无法正常化,则认为基于数据库外键(包括DeepLoads)使用额外的AccountId过滤器来获取所有构建它的导航属性将是一个相当大的改变。
此外,您提到添加包含AccountId的重载将是一个可接受的解决方案。然而,这将保持现有NetTiers重载不需要ACCOUNTID参数任何DAL消费者...
总之,这里的一些地区的总结,你会需要考虑修改:
为了确保在没有提供AccountId的情况下不能成功执行查询(有很多方法可以通过例如GetPaged @where
子句规避默认DAL),您可能必须在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的发展,你不再需要深入研究数据访问管道层(即使只是在代码生成层面)。
一些优秀的技巧,从哪里开始整个nettiers作为一个整体,而不是具体的我的问题。谢谢 – 2011-04-13 09:34:49