一、SubSonic简单介绍
SubSonic是一个类似Rails的开源.NET项目。你可以把它看作是一把瑞士军刀,它可以用来构建Website和通过ORM方式来访问数据。Rob Conery和Eric Kemp是推动SubSonic的主要开发人员,与项目良好的发展有着密切的关系。是一个优秀的、开源的ORM映射框架。
另外官方有提供符合自身需要的代码生成器sonic.exe,但是笔者在SubSonic并未下载到类代码生成器,而是按照SubSonic的映射规则,在之前的用过的SubSonic的类上面做的修改,为下文的demo所使用,如果哪位朋友有SubSonic代码生成器连接,欢迎共享一下给大家。
二、SubSonic使用步骤
1、新增SubSonic配置文件并引入SubSonic.dll
配置文件并不多,有三处分别加入到web.config
<configSections>
<section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" allowDefinition="MachineToApplication" restartOnExternalChanges="true" requirePermission="false"/>
</configSections>
<connectionStrings>
<add name ="SubSonicConn" connectionString="Data Source=.;Initial Catalog=Test;Integrated Security=true;uid=sa;password=XXXXXX;"/>
</connectionStrings>
<SubSonicService defaultProvider="SubSonicConn" enableTrace="false" templateDirectory="">
<providers>
<clear/>
<add name="SubSonicConn" type="SubSonic.SqlDataProvider, SubSonic"
connectionStringName="SubSonicConn" generatedNamespace="SubSonicConn" removeUnderscores="false" />
</providers>
</SubSonicService>
配置文件就这样,注意数据连接串的name值,包括后面项目中映射类文件的name值,一定要保持一致。
2、项目下新建Generated文件夹,保存SubSonic所需的类映射文件
其中Rolexxx相关为Role表的使用类,AllStructs.cs为主要的控制器文件,StoredProcedures.cs为存储过程相关的类。具体类代码如下:
using System; using System.Text; using System.Data; using System.Data.SqlClient; using System.Data.Common; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Xml; using System.Xml.Serialization; using SubSonic; using SubSonic.Utilities; // <auto-generated /> namespace ORMSubSonic.Generated { #region Tables Struct public partial struct Tables { public static readonly string Boy = @"boy"; } #endregion #region Schemas public partial class Schemas { public static TableSchema.Table Boy { get { return DataService.GetSchema("boy", "SubSonicConn"); } } } #endregion #region View Struct public partial struct Views { } #endregion #region Query Factories public static partial class DB { public static DataProvider _provider = DataService.Providers["SubSonicConn"]; static ISubSonicRepository _repository; public static ISubSonicRepository Repository { get { if (_repository == null) return new SubSonicRepository(_provider); return _repository; } set { _repository = value; } } public static Select SelectAllColumnsFrom<T>() where T : RecordBase<T>, new() { return Repository.SelectAllColumnsFrom<T>(); } public static Select Select() { return Repository.Select(); } public static Select Select(params string[] columns) { return Repository.Select(columns); } public static Select Select(params Aggregate[] aggregates) { return Repository.Select(aggregates); } public static Update Update<T>() where T : RecordBase<T>, new() { return Repository.Update<T>(); } public static Insert Insert() { return Repository.Insert(); } public static Delete Delete() { return Repository.Delete(); } public static InlineQuery Query() { return Repository.Query(); } } #endregion } #region Databases public partial struct Databases { public static readonly string SubSonicConn = @"SubSonicConn"; } #endregion