zoukankan      html  css  js  c++  java
  • NopCommerce支持多种类型的数据库

    本文章的内容是根据本人阅读NopCommerce源码的理解,如有不对的地方请指正,谢谢。

    阅读目录

    1.类结构关系图

    2.分析

    3.NopCommerce应用

    类结构关系图

     

    分析

     NopObjectContext分别继承了DbContext, IDbContext,EF对应数据库访问操作需继承DbContext类。定义IDbContext目的主要是定义常用数据库操作方法

    DataSettingsManager类主要是对settings.txt配置文件操作,DataSettings结构存储解析文件内容。

    IDataProvider类为各类型数据库抽象常用方法,通过EfDataProviderManager类具体实例数据库对象。

    IDatabaseInitializer接口提供初始化数据库方法,SqlServerDataProvider依赖CreateTablesIfNotExist类并继承IDatabaseInitializer接口。具体代码编写如下:

    var initializer = new CreateTablesIfNotExist<NopObjectContext>(tablesToValidate, customCommands.ToArray());
    Database.SetInitializer(initializer);

    NopCommerce应用

    NopCommerce应用程序启动的时候会先注入DataSettings、BaseDataProviderManager以及数据库上下文DbContext,为了支持多数据库Nop应用了一个简单工厂模式,所有数据库都得继承IDataProvider接口,当前文章只写了两个子类分别是SqlCeDataProvider和SqlServerDataProvider。EfDataProviderManager类是提供实例数据库对象的一个入口方法LoadDataProvider,详细代码如下:

    public override IDataProvider LoadDataProvider()
    {
     
    var providerName = Settings.DataProvider;
    if (String.IsNullOrWhiteSpace(providerName))
    throw new NopException("Data Settings doesn't contain a providerName");
     
    switch (providerName.ToLowerInvariant())
    {
      case "sqlserver":
        return new SqlServerDataProvider();
      case "sqlce":
        return new SqlCeDataProvider();
      default:
        throw new NopException(string.Format("Not supported dataprovider name: {0}", providerName));
    }
     
    }

    DataSettingsManager文件配置管理类主要是对setting.txt文本文件进行解析,最后生成DataSettings类结构,文件内容格式为:

    DataProvider: sqlserver
    DataConnectionString: Data Source=.;Initial Catalog=NOP;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=123

    Nopcommerce为了更好的为用户提供二次开发,提供了自动安装数据库和测试sql文件,方便开发者更容易理解该项目程序。启动该程序进入安装操作,程序就会对配置文件进行解析,检测用户是否安装数据库或者表结构,为安装则会自动进行安装,安装过程调用CreateTablesIfNotExist类的InitializeDatabase方法,完成数据库初始化操作。

  • 相关阅读:
    TP连接数据库报错:SQLSTATE[HY000] [2002] No such file or directory (原)
    linux的查找命令 find whereis locate
    windows下cmd无法使用telnet命令解决方法 (原)
    CDN和智能DNS原理和应用 (原)
    面试:sql语句-1-基础查询
    面试问题:对框架的理解
    Hub,bridge,switch and router的区别
    If you ever have a broken heart
    virt-viewer的简单使用
    各种虚拟化镜像文件格式
  • 原文地址:https://www.cnblogs.com/luomingui/p/12250742.html
Copyright © 2011-2022 走看看