我正在评估在我的下一个项目中使用NetTiers。
问题是:我的模式中的每个表都有一个字段AccountId。对于每个对DAL的请求,我希望它是一个要求,即在查询中传递并用作过滤器的AccountId。
如果使用此参数生成额外的重载,则可以接受。
我怀疑这个功能不是内置的,所以谁能提供任何关于从哪里开始修改模板以添加它的建议?
发布于 2011-04-04 19:55:44
一旦您对NetTiers模板所生成的错综复杂的类有了一定的了解,那么修改它并不困难,但这通常非常单调乏味,而且非常容易出错。
我的第一个假设是,您正在生成的数据库要么只有几个表,要么是非规范化的-否则,在每个表中都有一个AccountId列是没有意义的。如果是后者,并且结构不能被规范化,它相信这将是一个相当大的变化,使所有基于数据库外键(包括DeepLoads)的内置导航属性与额外的AccountId过滤器一起工作。
此外,您还提到添加包含AccountId的重载将是一个可接受的解决方案。但是,这会将不需要AccountId参数的现有NetTiers重载留给任何DAL使用者...
无论如何,以下是您需要考虑修改的一些方面的摘要:
GetPaged @where子句绕过缺省DAL ),您可能必须在SQL层进行更改。这些模板位于/DataAccessLayer.*Client/文件夹中。假设您使用的是server,则可以修改生成sql的文件(/DataAccessLayer.SqlClient/StoredProcedureProvider.cst),以确保始终传递@AccountId参数。/DataAccessLayer.SqlClient/SqlEntityProviderBase.generated.cst和/DataAccessLayer/EntityProviderBaseCore.generated.cst )的更改,也可能导致实体层(/Entities/) (如EntityBaseCore.generated.cst和AccountId)的更改我的一般建议是,虽然NetTiers和CodeSmith在几年前是构建DAL的首选工具,但现在我不推荐走这条路。随着微软的实体框架和开源NHibernate的发展,您不再需要深入研究数据访问管道层(即使只是在代码生成级别)。
https://stackoverflow.com/questions/4444290
复制相似问题