刚开始使用中就碰到问题:按照官方的方法配置,总是不能编译时自动生成数据访问层代码(其中一种,也可使用命令行自己生成,2010-下面介绍)。本文只要介绍了这两种配置subsonic的方法。
1.配置方法
自动在临时文件夹生成的官方方法如下:
(1)修改web.config
在web.config里configuration节下面加入一下内容:
然后在system.web节内加入buildProviders配置节:
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里面写入:
两行代码即可完成。Product是根据数据库自动生成的代码,真正项目中要想使用,必须要通过partial class的方法把这些类进行相应的扩展,留在以后再说。
Subsonic 的实践安装方法:
(1) 安装SubSonic2.03(在Vista系统中要使用Administrator帐户;
(2)逐个编译SubSonic tools ,使得VS 2005中安装了Add-in工具;
(3)新建一个visual studio 2005的工程,数据库用Sql Server2000(建议用2005版本),如果是Web应用程序按F5可以产生Web.config,如果是WindowsForm或者Dll应用程序,手动添加App.config(具体修改串解释,以下详细说明)
(4)添加引用,浏览添加SubSonic.dll(SubSonic安装目录下),添加System.configuration引用和System.Web(不晓得为什么添加这个?)
(5)新建一个DAL文件夹,在DAL上右击,进入SubSonic菜单,选择Generate Multiple Files
Web.config或App.config参数详解(红色字体标识):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="SubSonicService"
type="SubSonic.SubSonicSection, SubSonic"
allowDefinition="MachineToApplication"
restartOnExternalChanges="true"
requirePermission="false"/>
<section name="dataConfiguration"
type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,
Microsoft.Practices.EnterpriseLibrary.Data" />
</configSections>
<appSettings/>
<connectionStrings>
<clear/>
<add name="数据库联接名,示例:NorthwindConnection" connectionString="Data Source=.;Initial Catalog=想要生成实体类的数据库名,,示例:Northwind;Integrated Security=True"/>
</connectionStrings>
<SubSonicService defaultProvider="提供程序名,会作为类的前缀,示例:Northwind">
<providers>
<clear/>
<add name="提供程序名,会作为类的前缀,示例:Northwind" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="数据库联接名,示例:NorthwindConnection"
generatedNamespace="类的命名空间,示例:Northwind"
/>
</providers>
</SubSonicService>
</configuration>
特别: 解释说明相同的需保持相同名字