前一章讲解了如何生成实体,下面就具体来谈谈怎么样来对DbSession进行配置吧。
DbSession(数据会话类)是数据操作的核心,所有数据库的操作都通过它来完成,所以在编写数据库访问层之前得实例化DbSession对象。
下面我们就来认识一下这个DbSession对象。
一、DbSession实例化配置
DbSession两有种方式来进行实例化
1、通过配置文件创建
//指定connectionStrings节的名称来实例化DbSession public DbSession(string connectName);
这种方式一般用于已经配置好connectionStrings节的用户,如下所示:
<connectionStrings> <add name="DataExample" connectionString="Server=(local);Database=Northwind;Uid=sa;Pwd=sa;" providerName="MySoft.Data.SqlServer9.SqlServer9Provider" /> </connectionStrings>
上面的配置节如果是Web项目,则在web.config中指定,如果是winform项目,则在app.config中的指定
后面的providerName指定数据库链接所使用的驱动。
上面的配置方式只针对.net已经支持的驱动,如Access,SqlServer,Oracle
默认程序集为MySoft.Data.dll
如果是MySql,Firebird,SQLite需要额外的程序集支持,就需要按如下配置:
<connectionStrings> <add name="DataExample" connectionString="Server=(local);Database=Northwind;Uid=sa;Pwd=sa;" providerName="MySoft.Data.MySql.MySqlProvider, MySoft.Data.MySql" /> </connectionStrings>
providerName的写法是前面className,后面跟assemblyName。
而且需要添加相关的驱动,如:MySql需要添加MySql.Data.dll与MySoft.Data.MySql.dll
2、通过动态创建DbProvider
//通过创建驱动的方式来实例化DbSession public DbSession(DbProvider dbProvider);
这种方式一般用于需要动态创建会话对象的用户
DbProvider是一个抽象类,用户还可以自行扩展此驱动。
动态创建DbProvider来实例化DbSession会话:
A、可以传入connectionName来创建驱动,此时connectionName配置节可以不用写providerName;
DbProvider provider = ProviderFactory.CreateDbProvider("DataExample", ProviderType.SqlServer9); DbSession DataExample = new DbSession(provider);
B、通过传入connectionString来创建驱动,内部ProviderType枚举已经将支持的驱动罗列出来。 DbProvider provider = ProviderFactory.CreateDbProvider(ProviderType.SqlServer9,
"Server=(local);Database=Northwind;Uid=sa;Pwd=sa;"); DbSession DataExample = new DbSession(provider);
C、如果是用户自已实现的驱动,可以通过第三种方式来创建驱动。
DbProvider provider = ProviderFactory.CreateDbProvider(string assemblyName, string className,
string connectionString); DbSession DataExample = new DbSession(provider);
不过对于一般用于,通过内置的驱动已经完全够用了。
二、DbSession自定义实例化
DbSession实例化有两种方式,直接实例化DbSession,如果内置的DbSession.Default就是其中一种。
DbSession.Default:
这是DbSession内部一个静态的DbSession对象,默认创建自connectionStrings中的最后一个配置节中的数据库链接,如果providerName为空,将默认为SqlServer2000.
下面就讲一下如何来实例化DbSession来进行数据的访问
然后新建一个DataAccess的类,用来进行数据的访问类,名字可以自己定义。
讲解也比较费事,直接贴上代码:
/// <summary> /// 数据库访问类 /// </summary> public static class DataAccess { /// <summary> /// 通过配置节来实例化DbSession /// </summary> public static readonly DbSession DefaultSession = new DbSession("DataExample"); /// <summary> /// 通过自定义类来实例化DbSession /// </summary> public static readonly DataExample ExampleSession = new DataExample(); } /// <summary> /// DataExample会话类 /// </summary> public class DataExample : DbSession { public DataExample() : base("DataExample") { this.RegisterSqlLogger(log => { System.IO.File.WriteAllText("c:\\log.txt", log); }); } }
进行以上配置后,用户可以有三种方式来操作数据,效果都一样的:
只不过ExampleSession操作数据库会写日志到c:\\log.txt文件。
通过继承可以很方便的实现注册写日志事件。而且对外显示的名字为DataExample,这样是否显得更加清晰和雅观呢。
如果不需要写日志,将注册事件的代码注释掉即可,还有一种方式是通过宏的方式,如下:
/// <summary> /// DataExample会话类 /// </summary> public class DataExample : DbSession { public DataExample() : base("DataExample") { #if DEBUG this.RegisterSqlLogger(log => { System.IO.File.WriteAllText("c:\\log.txt", log); }); #endif } }
这样在Release模式下注册事件的代码将失效,这样便于在Debug模式下调试,发布时就不需要写日志了。
DbSession的配置就讲解到这里,下一章将讲述如何使用DbSession来进行数据插入操作!
有什么问题可以到此处:MySoft组件问题反馈与疑难解答