C# 关于修改NetTiers的建议
我同意在我的下一个项目中使用NetTiers 问题是: 我的模式中的每个表都有一个字段AccountId。对于DAL的每个请求,我希望它成为传递AccountId并在查询中用作筛选器的要求 如果生成使用此参数的额外重载,则可以接受C# 关于修改NetTiers的建议,c#,code-generation,.nettiers,C#,Code Generation,.nettiers,我同意在我的下一个项目中使用NetTiers 问题是: 我的模式中的每个表都有一个字段AccountId。对于DAL的每个请求,我希望它成为传递AccountId并在查询中用作筛选器的要求 如果生成使用此参数的额外重载,则可以接受 我怀疑这个功能不是内置的,所以有人能提供一些建议,从哪里开始修改模板来添加它吗?一旦您了解了NetTiers模板生成的错综复杂的类,修改NetTiers模板就不难了,但它通常非常乏味,而且非常容易出错 我的第一个假设是,您正在生成的数据库要么只有几个表,要么是非规范化
我怀疑这个功能不是内置的,所以有人能提供一些建议,从哪里开始修改模板来添加它吗?一旦您了解了NetTiers模板生成的错综复杂的类,修改NetTiers模板就不难了,但它通常非常乏味,而且非常容易出错 我的第一个假设是,您正在生成的数据库要么只有几个表,要么是非规范化的——否则,在每个表中都有AccountId列是没有意义的。如果是后者,并且结构无法正常化,那么它认为将所有基于数据库外键(包括DeepLoads)的内置导航属性与额外的AccountId过滤器结合使用将是一个相当大的改变 另外,您提到添加包含AccountId的重载将是一个可接受的解决方案。但是,这将使任何DAL使用者都不需要AccountId参数的现有NetTiers重载 无论如何,下面是您需要研究的一些领域的摘要:
- 为了确保在不提供AccountId的情况下无法成功执行任何查询(例如,有很多方法可以通过
子句绕过默认的DAL),您可能需要在SQL层进行更改。这些模板位于GetPaged@where
文件夹中。假设您使用的是sql server,则可以修改生成sql的文件(/DataAccessLayer.*Client/
),以确保始终传递@AccountId参数StoredProcedureProvider.cst
- 这将导致相关文件的更改,例如和可能
- 这反过来会导致实体层()中的更改,例如
和EntityBaseCore.generated.cst
EntityInstanceBase.generated.cst
我的一般建议是,虽然几年前NetTiers和CodeSmith是构建DAL的首选工具,但我不建议现在走这条路。随着微软实体框架和开源NHibernate的发展,您不必再深入数据访问管道层(即使只是在代码生成级别) 关于从哪里开始的一些很好的建议,从整体上来说,而不是具体地问我的问题。谢谢