前一章讲解了如何生成实体,下面就具体来谈谈怎么样来对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来进行数据的访问

新建一个MySoftExample.Web项目。tmp2F82

然后新建一个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组件问题反馈与疑难解答

注:此段时间工作上比较忙,故文档更新比较慢,让大家在使用上造成的困扰表示抱歉!

 
 
 
 
 
 

posted on 2010-03-11 16:17  MySoft  阅读(5175)  评论(2编辑  收藏  举报