用抽象工厂来解决多数据库之间的切换问题是普遍的,像以下几篇文章都讲的很具体

申明之前写的存在强大漏洞 -- 之前有涉及到IoC Autofac的知识点,鄙人孤陋寡闻,在亲身实践后才发现其中奥妙可参照一下几篇文章

http://www.codeproject.com/Articles/808894/IoC-in-ASP-NET-MVC-using-Autofac

http://code.google.com/p/autofac/wiki/Mvc3Integration

http://www.cnblogs.com/zhouruifu/archive/2012/04/03/dependency-injection-in-asp-net-web-api-using-autofac.html

http://blog.csdn.net/zouyujie1127/article/details/15341569

http://www.cnblogs.com/tiger8000/archive/2012/01/04/2312134.html

但是考虑到在服务器上资源释放的问题,还是会选择采用另一种实现方式

先新建一个类库 Interface,这个类库对谁都不依赖,这里有各种抽象的方法,但并没有关于数据库连接啊或者操作之类的抽象方法,这里定义的抽象方法和controller里的对应,

   1:  namespace WebApi.Interface
   2:  {
   3:      public interface ICommon
   4:      {
   5:          int regist(String LoginName, String Password);
   6:      }
   7:  }

再定义一个具体的实现的类库

   1:  namespace WebApi.OracleImp
   2:  {
   3:      public class Common: WebApi.Interface.ICommon
   4:      {
   5:          public int regist(String LoginName, String Password)
   6:          {
   7:              using (var conn = new System.Data.OracleClient.OracleConnection(OracleHelper.ConnString))
   8:              {
   9:                  conn.Open();
  10:                  using (var command = conn.CreateCommand())
  11:                  {
  12:                      command.Parameters.Clear();
  13:                      command.Parameters.Add(new System.Data.OracleClient.OracleParameter(":LoginName", LoginName));
  14:                      command.Parameters.Add(new System.Data.OracleClient.OracleParameter(":Password", Password));
  15:                      command.CommandText = "insert into  YG(DLM,MM) value(:LoginName,:Password)";
  16:                    var result = command.ExecuteNonQuery;
  17:                   return result;
  18:                  }
  19:               }
  20:          }
  21:      }
  22:  }
  最后在Controller里实现一个或多个接口就可以了
   1:          Interface.ICommon _common;
   2:          public DemoController(Interface.ICommon common)
   3:          {
   4:              this._common = common;
   5:          }
   6:          [HttpPost]
   7:          public int regist(String LoginName, String Password)
   8:          {
   9:   
  10:              if (String.IsNullOrWhiteSpace(Password))
  11:              {
  12:                 throw new exception("password为空");
  13:              }
  14:              if (String.IsNullOrWhiteSpace(LoginName))
  15:              {
  16:                 throw new exception("(LoginName))为空");
  17:              }
  18:   
  19:              var result = _common.regist(LoginName, Password);
  20:              return result;
  21:          }


针对不同的数据库写不同的实现的类库,就能做到多数据库的切换了,还的记得子啊webconfig中申明是对哪个实现的实现

<add key="LoadAssembly" value="WebApi.OracleImp"/>,这样切换不同的实现时就可以实现对里面不同实现方法的实现。

这里要实现各依赖项的加载还必须要做到一下几步:

1.先添加引用

using Autofac;
using Autofac.Integration.WebApi;

2.

var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(Assembly.Load(ConfigurationSettings.AppSettings["LoadAssembly"]))
.Where(t => true)
.AsImplementedInterfaces();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

至于为什么需要好好研究会

WebApi多数据库切换的更多相关文章

  1. Thinkphp5多数据库切换

    在项目开发中需要Thinkphp5读取多个数据库的数据,本文详细介绍Thinkphp5多数据库切换 一.在database.php配置默认数据库连接 'type'           => 'm ...

  2. Exchange 2019数据库切换

    最近在测试Exchange 2019的一些安装步骤.在测试到DAG的数据库切换的时候遇到了一些问题.An Active Manager operation failed. Error: The dat ...

  3. redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换

    一.  概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解.下面再了解类型检查,内存回收,对象共享,对象的空转时长. 1.1 ...

  4. Farseer.net轻量级开源框架 中级篇:数据库切换

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 动态数据库访问 下一篇:Farseer.net轻量级开源框架 中级篇: SQL执行 ...

  5. JIRA数据库切换(HSQL Database到MySQL)

    没试过的版本,但是看着靠谱: 注:如果你之前配置过hsql版本,这次修改mysql数据操作会导致配置数据丢失,所以请注意备份 一. 创建名为jiradb的mysql数据,编码格式为utf-8 二.修改 ...

  6. jira 从数据库 切换到mysql

    通过JIRA管理员登录,进入“管理员页面”,“系统”--“导入&导出”,以XML格式备份数据. 在MySQL中创建Schema,命名为jira 关闭JIRA服务 备份一下JIRA的安装目录和数 ...

  7. WebAPI接口测试数据库操作

    通常我们是不建议直接查看数据库内容来检查功能的,但是在没有外部接口或者图形界面验证的情况下,只能通过查询数据库来验证. 比如我们手工需要从界面上添加一万条数据,估计要花好几天时间,显然不能手工去操作. ...

  8. mybatis多数据库切换,(动态数据源)。

    项目中将一个库的某些标的某些数据保存到另一个库. 使用spring的aop编程动态切换数据源,代码如下,以备下次用到! 1.先将两个数据库连接,创建两个数据源,交于spring管理! <bean ...

  9. thinkPHP跨数据库访问/数据库切换

    在项目的开发中会遇到访问多个数据库的问题这里讲的是:访问同一地址下的多个数据库 第一步:在配置文件中配置你要连接的其他的数据库 例如:我现在默认的数据库是back 现在我要设置第二个数据库travel ...

随机推荐

  1. centos搭建svn服务器并在windows实验

    安装步骤如下: 1.yum install subversion   2.输入rpm -ql subversion查看安装位置,如下图:   我们知道svn在bin目录下生成了几个二进制文件. 输入 ...

  2. windows编程注意点(持续更新)

    1.windows编程中,所有的操作都放到窗口过程中进行,main函数只用于描述窗口基本信息. 2.用于获取设备环境句柄时,用BeginPaint/EndPaint,消耗cpu小,但占内存大;用Get ...

  3. 【轮子】发现一个效果丰富酷炫的Android动画库

    没有什么比发现一个好轮子更让人开心的了. 这个库分分钟提高交互体验 :AndroidViewAnimations 一张图说明一切 配置和使用也相当简单 GitHub地址

  4. POJ 1830 开关问题 (高斯消元)

    题目链接 题意:中文题,和上篇博客POJ 1222是一类题. 题解:如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择. 代码: #include <iostream> ...

  5. 【Excel 4.0 函数】REGISTER

    REGISTER.ID 返回指定的 DLL 或 代码资源注册过的函数 ID.如果 DLL 或 代码资源没有注册,这个函数将会注册它们,并返回 注册ID. REGISTER.ID 可以用于工作表(不同于 ...

  6. MyEclipse在线安装maven插件最新地址

    http://repository.sonatype.org/content/sites/forge-sites/m2e/0.10.0/S/20100209-0800/

  7. Java抽象类接口、内部类题库

    一.    选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是(  C  ).(选择一项)   public class Person { public String nam ...

  8. 240个jquery插件(转)

    http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/File upload Ajax File U ...

  9. BeatifulSoup文档地址

    http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

  10. 数据结构之Dijkstra算法

    基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算). 此外,引进两个集合S和U.S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求 ...