我刚开始使用Subsonic 2.2并且到目前为止印象非常深刻 - 认为它会为我节省一些严肃的编码时间。
在我全职使用它之前,虽然有些事情让我烦恼,但我想整理一下。
在我当前的数据库(SQL2008数据库)中,我已经按照模式/所有者名称将表,视图,sps等拆分为单独的块,因此所有客户表都在客户中。架构,产品中的产品。架构等,所以a从客户地址表中选择我要从customer.address
中选择*不幸的是,Subsonic忽略了架构/所有者名称,只给了我基表名称。这很好,因为我在模式之间没有重复(例如Customer.Address和Supplier.Address都不存在)但我觉得如果我可以按模式拆分代码可以更清楚。
理想情况下,我希望能够通过架构/所有者更改名称空间 - 我认为这对SubSonic的影响最小,但使得生成的代码更容易阅读。
问题是,我已经遍历了亚音速源,并且没有线索如何做到这一点(没有帮助我在VB中编码而不是C#=是的我知道,责怪ZX Spectrum !!)
如果有人之前已经解决了这个问题,或者对如何解决这个问题有所了解,我会非常感激,
提前致谢。
版
答案 0 :(得分:6)
我也建议使用多提供商方法。 但是很多管道已经成为所有权的亚音。 如果在CS_ClassTemplate.aspx中编辑几行,则可以为每个所有者配置文件创建一个名称空间。围绕第58行(我正在使用v2.1)改变
namespace <%=provider.GeneratedNamespace%><%=owner%>
所有者
string owner = "." + tbl.SchemaName;
if(owner == ".dbo")
owner = "";
你把它放在第14行左右。这样你就可以为每个所有者设置一个命名空间,如: Northwind.Suppliers,Northwind.Customers等 我把dbo留作Northwind所以所有测试都会在没有大量编辑的情况下编译。 我运行了一个简单的选择查询,我认为它将以您想要的方式工作。
答案 1 :(得分:3)
您可以使用我们的t4模板在3.0中执行此操作(但仅限3.5)。这是一个非常好的反馈 - 我们应该默认建立这个!
很高兴你在这里得到了一些帮助。
答案 2 :(得分:1)
您可以尝试使用具有相同基础数据库连接的单独提供程序,如下所示:
<SubSonicService defaultProvider="DBData">
<providers>
<clear/>
<add name="DBData" type="Subsonic.SqlDataProvider, SubSonic" connectionStringName="LocalSqlServer" generatedNamespace="DBData" includeTableList="table_a,table_b" spStartsWith="app,get,set" viewStartsWith="v_" />
<!--CMS Provider-->
<add name="CMS" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="LocalSqlServer" generatedNamespace="CMS" stripTableText="CMS_" includeTableList="CMS_Content,CMS_Page" useSPs="false"/>
</providers>
</SubSonicService>
我认为你不能以这种方式将模式本身用作关键字,但你至少可以通过includeTableList和generatedNamespace的组合来解决这个问题。你说你在不同的模式中没有重复的表名,所以它可能会起作用。
答案 3 :(得分:1)
只是为了让你知道我现在有这个 - 或者至少是编译! :-)要使所有者解决方案完全正常工作,您需要对类模板进行更多更改,否则表/键函数位于错误的命名空间内。
我还使用存储过程模板进行了攻击。我不能(在很短的时间内)找出如何为每个所有者分成单独的文件/命名空间,所以我已经为每个sp函数加上了所有者和下划线的前缀。
但是,如果你遇到同样的问题,你就会知道可以修复它。
Ed