你的位置:首页 > ASP.net教程

[ASP.net教程]Rookey.Frame之DAL工厂


      昨天给大家介绍了表单验证功能,今天给大家介绍下Rookey.Frame框架的数据层工厂,由于Rookey.Frame框架ORM是基于servicestack.ormlite,很多朋友反映这个网上中文资料比较少,能不能用dapper或其他的替换掉,答案是肯定的,只在在Rookey.Frame.DALFactory下增加一个工厂类继承抽象工厂DalAbstractFactory,实现相关操作方法即可。

      首先我们来看下DalAbstractFactory的实例化代码

    /// <summary>    /// 实例化工厂    /// </summary>    /// <param name="factoryType">数据工厂类型</param>    /// <returns></returns>    public static DalAbstractFactory<T> GetInstance(DatabaseType factoryType)    {      switch (factoryType)      {        case DatabaseType.MsSqlServer:          {            IOrmLiteDialectProvider dialectProvider = SqlServerDialect.Provider;            return new OrmLiteDalFactory<T>(dialectProvider);          }        case DatabaseType.MySql:          {            IOrmLiteDialectProvider dialectProvider = MySqlDialect.Provider;            return new OrmLiteDalFactory<T>(dialectProvider);          }        case DatabaseType.Oracle:          {            IOrmLiteDialectProvider dialectProvider = OracleDialect.Provider;            return new OrmLiteDalFactory<T>(dialectProvider);          }        default:          {            IOrmLiteDialectProvider dialectProvider = SqlServerDialect.Provider;            return new OrmLiteDalFactory<T>(dialectProvider);          }      }    }

    根据数据库类型进行抽象工厂实例化,这样我们很容易对Rookey.Frame的ORM进行替换和改造或增加,如果有更好的ORM可以很方便的接入,对上层项目没有任何影响。

    在抽象工厂中还有两个属性ReadConnectionString、WriteConnectionString,读连接字符串和写连接字符串

    /// <summary>    /// 读数据库连接串    /// </summary>    public string ReadConnectionString    {      get      {        return WebConfigHelper.GetConnectionString("DbReadConnString");      }    }    /// <summary>    /// 写数据库连接串    /// </summary>    public string WriteConnectionString    {      get      {        string connSting = WebConfigHelper.GetConnectionString("DbWriteConnString");        if (!string.IsNullOrEmpty(connSting)) return connSting;        return ReadConnectionString;      }    }

这两个字符串的读取是根据之前介绍的数据库配置文件来的,在Rookey.Frame框架中基本上每个数据库操作方法都带有string connString = null这个参数,在数据抽象工厂实现层中会优化取用户传入的数据库连接字符串,为空时取配置的数据库连接

/// <summary>    /// 获取连接字符串    /// </summary>    /// <param name="connString">数据库连接字符串,调用方法是传入的数据库连接字符串</param>    /// <param name="read">是否读</param>    /// <returns></returns>    private string GetConnString(string connString, bool read = true)    {      string lastConnStr = !string.IsNullOrEmpty(connString) ? connString : (read ? this.ReadConnectionString : this.WriteConnectionString);      string modelConfigConnString = GetModelConfigConnString(read); //取模块数据库连接配置      if (string.IsNullOrEmpty(connString) && !string.IsNullOrEmpty(modelConfigConnString))      {        lastConnStr = modelConfigConnString;      }      NotNullCheck.NotEmpty(lastConnStr, "数据库连接字符串");      return lastConnStr;    }

    /// <summary>    /// 获取所有实体集合    /// </summary>    /// <param name="references">是否加载导航属性</param>    /// <param name="connString">数据库连接字符串,调用方法时传入的连接字符串</param>    /// <returns></returns>    public override List<T> GetAllEntities(bool references = false, string connString = null)    {      string connStr = GetConnString(connString);      OrmLiteConnectionFactory factory = new OrmLiteConnectionFactory(connStr, _dialectProvider);      using (var conn = factory.OpenDbConnection())      {        try        {          SqlExpression<T> exp = conn.From<T>().ThenByDescending("Id");          if (references)          {            exp = exp.Limit(0, 2000);          }          List<T> list = references ? conn.LoadSelect<T>(exp) : conn.Select<T>(exp);          if (list == null) list = new List<T>();          return list;        }        finally        {          conn.Close();          conn.Dispose();        }      }    }

    对于数据层抽象工厂的其他细节功能请下载最新框架源码了解,今天对DAL工厂就介绍到此地,下次介绍框架数据层,祝大家生活愉快!