在刚开始使用中就碰到问题:按照官方的方法配置,总是不能编译时自动生成数据访问层代码(其中一种,也可使用命令行自己生成,下面介绍)。本文只要介绍了这两种配置subsonic的方法。
1.配置方法
自动在临时文件夹生成的官方方法如下:
(1)修改web.config
在web.config里configuration节下面加入一下内容:
1<configSections>
2 <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
3 </configSections>
4 <appSettings/>
5 <connectionStrings>
6 <add name="football" connectionString="Data Source=ERICK;Initial Catalog=polan2;Persist Security Info=True;User ID=sa;Password=sa" providerName="System.Data.SqlClient"/>
7 </connectionStrings>
8 <SubSonicService defaultProvider="football">
9 <providers>
10 <clear/>
11 <add name="football" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="football" generatedNamespace="football"/>
12 </providers>
13 </SubSonicService>
2 <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
3 </configSections>
4 <appSettings/>
5 <connectionStrings>
6 <add name="football" connectionString="Data Source=ERICK;Initial Catalog=polan2;Persist Security Info=True;User ID=sa;Password=sa" providerName="System.Data.SqlClient"/>
7 </connectionStrings>
8 <SubSonicService defaultProvider="football">
9 <providers>
10 <clear/>
11 <add name="football" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="football" generatedNamespace="football"/>
12 </providers>
13 </SubSonicService>
然后在system.web节内加入buildProviders配置节:
1<compilation debug="true" defaultLanguage="C#">
2 <!--########################## SubSonic Build Provider ###############################-->
3 <!--This will NOT WORK in Medium Trust-->
4 <buildProviders>
5 <add extension=".abp" type="SubSonic.BuildProvider, SubSonic"/>
6 </buildProviders>
7 <assemblies>
8 <add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
9 </assemblies>
2 <!--########################## SubSonic Build Provider ###############################-->
3 <!--This will NOT WORK in Medium Trust-->
4 <buildProviders>
5 <add extension=".abp" type="SubSonic.BuildProvider, SubSonic"/>
6 </buildProviders>
7 <assemblies>
8 <add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
9 </assemblies>
web.config的设置结束。
(2)添加对subsonic.dll文件的引用
右键项目--添加引用--浏览
(3)在app_code文件下加入subsonic.abp文件
这里subsonic.abp是根据buildProviders配置节里面的extension=".abp"而来, .abp代表application build provider,目的是为了在编译时自动生成数据访问层,这些代码放在了框架的临时文件夹里面。
(4)编译之
我用的vs2008的webapplication,在上述三步后,发现vs2008依然不能找到我自己创建的命名空间以及相应的类,而且从编译时间上也能断定项目并没有按正常情况自动创建数据访问层的类代码。非常费解,今天又用vs2005 和2008分别对subsonic在website和webapplication下的配置进行了测试,发现上述方法只能在vs2005下的website中正常使用,对于其他三个项目,则只能使用另一种方法,IDE的外部工具:
(1)添加visual studio外部工具
打开vs2005或者2008,菜单-工具-外部工具,添加外部工具对话框如下:
命令行处找到subsonic的命令行工具(位于安装文件下);参数的最后一个空格后面的是要输出的目录(自己选择);
(2)运行SubsonicTool外部工具
然后菜单-工具下就有一个subsonictool的工具按钮,直接点击,就会弹出:
输入相应的目录,ok就能在generated文件夹下生成一系列数据访问层的类代码。结构如下:
注意:在webapplication项目中,不要将这些代码直接生成在自己创建的app_code中(默认下没有这个文件夹),会出现依然找不到命名空间和相应类的问题,最好自己在项目下直接建一个Generated文件夹作为放置数据访问层类代码的目录。
2.subsonic使用
这里对它的使用就不做太多介绍,如果以后遇到一些问题,也会记下来分享。只举个简单的例子:
在一个页面中放置一个gridview,id为productGrid,在后置代码pageload里面写入:
1productGrid.DataSource = football.Product.FetchAll();
2 productGrid.DataBind();
两行代码即可完成。Product是根据数据库自动生成的代码,真正项目中要想使用,必须要通过partial class的方法把这些类进行相应的扩展,留在以后再说。2 productGrid.DataBind();
3.结束语
本仅仅将我平时遇到的问题总结出来,主要是两种配置方法,希望对你们有帮助。关于subsonic详细信息请到官方网站。http://subsonicproject.com/
也欢迎给我留言或者发邮件讨论。