本次主要内容:修正MongoDB.Repository框架对多数据库的支持。

在之前的五篇文章中对MongoDB.Repository框架做了简单的介绍是实现思路。之前是考虑MongoDB.Repository框架是可以同时支持多数据,且已实现支持多数据库。但有个前提:实体的类型不能重复,即一个实体类型(即命名空间一样)只能存在一个数据库中。举例,X实体,如果注册在了A数据库,那么将不能注册在B数据库中。

虽然实现了该功能,但是存在一些问题和不足:

问题:只有在使用具体的实例进行数据库操作时才会提示异常,且异常信息不清楚。

不足:文件操作还未能支持多数据库,因为之前的版本对IMongoFile没有在IMongoDBContext上下文进行注册,所有的文件都会保存到一个数据库中。

当然以上的问题,如果不需要支持多数据库,那么也就不存在这些问题。而在实际的设计中,却很难避免。比如我们如果要做一个简单的平台,出于安全、独立等因素,用户信息和应用信息应该是分开的数据库部署。

本次修正内容:

A:将实体注册放置在上下文注册之前,即在注册上下文之前,首先要检查该上下文中注册的实体是否已经被其它上下文注册过。

B:IMongoFile的实体也需要在上下文中进行注册,不能对未注册的文件类型进行操作。并将MongoFile设置为abstract class,以保证注册流程。

下面给出一个具体的注册案例:

    public class Company : Entity
{ } public class Factory : Entity
{  } public class CompanyDBContext : MongoDBContext
{
public CompanyDBContext() : base("CompanyDBContext") { }
public override void OnRegisterModel(ITypeRegistration registration)
{
registration.RegisterType<Company>().RegisterType<Factory>(); //一次注册
}
} public class FactoryDBContext : MongoDBContext
{
public FactoryDBContext() : base("FactoryDBContext") { }
public override void OnRegisterModel(ITypeRegistration registration)
{
registration.RegisterType<Factory>(); //二次注册
}
} //注册上下文
MongoDBRepository.RegisterMongoDBContext(new CompanyDBContext());
MongoDBRepository.RegisterMongoDBContext(new FactoryDBContext()); //因Factory进行了多次注册,在此会抛出类型多次注册异常

如果需要使用文件,那么文件实体也一样需要注册,这在之前的版本并非强制,也存在一定的问题:

    public class MyFile : MongoFile
{
public MyFile()
: base(@"c:\testxml.xml", "test.xml", "xml")
{ }
} public class TestDBContext : MongoDBContext
{
public TestDBContext() : base("TestDBContext") { } public override void OnRegisterModel(ITypeRegistration registration)
{
registration.RegisterType<MyFile>(); //注册文件实体
}
}

文件实体注册后,即可以使用,使用方式与其他实体无异:

            //加载本地文件,并实例一个IMongoFile
IMongoFile file = MongoEntity.CreateFile<MyFile>(@"c:\pic1.jpg", "pic2.jpg", "jpg"); //下载文件,等同于文件另存为
file.Download(@"c:\beforesave.jpg"); //文件保存至数据库
file.Save(); //从数据中加载刚才保存的文件
IMongoFile fs = MongoEntity.LoadFile<MyFile>(file.Id); //将从数据中加载的文件下载
fs.Download(@"c:\aftersave.jpg"); //根据数据库中的文件名检索文件
var files = MongoEntity.LoadAllFiles<MyFile>("pic2.jpg"); //根据文件id,将数据库中的文件下载到本地
MongoEntity.DownloadFile<MyFile>(file.Id, @"c:\copy.jpg");

以上列出了一些文件的简单操作,并不是全部,每个方法也有不同程度的重载,并在以后根据实际使用情况会逐步的增加。

欢迎大家下载DLL使用,并在使用过程中提出问题,共同改善,源码地址,分享快乐!

MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 六:支持多数据库操作的更多相关文章

  1. MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 一

    本人系新接触MongoDB不久,属于MongoDB的菜鸟范畴.在使用MongoDB的过程中,总结了一些认识,在此总结跟大家分享.欢迎拍砖. 关于MongoDB的内容,在此就不做介绍了,网上有浩如烟海的 ...

  2. MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 三

    本次改动的主要内容是实现MongoDB.Repository在MongoDB中建立索引. 建立索引主要使用MongoDB的官方驱动中EnsureIndex方法. 在MongoDB.Repository ...

  3. MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 二

    本次改动的主要内容是实现MongoDB.Repository对MongoDBRef的支持. MongoDB对一对一,一对多,多对多关系的维护,官方推荐文档嵌入方式,反映到模型的设计如下: public ...

  4. MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 五 --- 为List<MongoDBRef>增加扩展方法

    本次改动主要内容:为List<MongoDBRef>增加扩展方法 在MongoDB.Repository的使用过程中,发现在一个类中只定义一个List<MongoDBRef>是 ...

  5. MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 四

    本次改动主要实现MongoGridFS功能.实现方式主要使用了MongoGridFS和MongoGridFSFileInfo两个类. 设计思路:定义一个IMongoFile接口并继承IEntity,以 ...

  6. MongoDB Python官方驱动 PyMongo 的简单封装

    最近,需要使用 Python 对 MongodB 做一些简单的操作,不想使用各种繁重的框架.出于可重用性的考虑,想对 MongoDB Python 官方驱动 PyMongo 做下简单封装,百度一如既往 ...

  7. 在.net下打造mongoDb基于官方驱动最新版本

    还是一如既往先把结构图放出来,上上个版本添加了redis的缓存,但是不满足我的需求,因为公司有项目要求是分布式所以呢,这里我就增加了mongoDb进行缓存分布式,好了先看结构图. 总的来说比较蛋疼,因 ...

  8. 使用MongoDB C#官方驱动操作MongoDB

    想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动有很多种,如官方提供的,samus. 实现思路大都类似.这里我们先用官方提供的mongo-csharp-dri ...

  9. 在C#中使用官方驱动操作MongoDB

    MongoDB的官方驱动下载地址:https://github.com/mongodb/mongo-csharp-driver/releases 目前最新的版本是2.10,支持.NET 4.5以上.由 ...

随机推荐

  1. HDU 3117 Fibonacci Numbers(围绕四个租赁斐波那契,通过计++乘坐高速动力矩阵)

    HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵高速幂) ACM 题目地址:HDU 3117 Fibonacci Numbers 题意:  求第n个斐波那契数的 ...

  2. jquery 元素控制(附加元素/其他内容)引进和应用

    一个.在内部元素/外部附加元件 append,prepend:加入到该子元素  before,after:元素加入 html: <div id="content"> 在 ...

  3. 6最好的之一 HTML5/CSS3 演示(PPT)框架

    HTML 是全世界最流行的网页编程语言.而HTML5是这门语言的升级版本号.越来越多的开发人员和设计师開始使用HTML5.以下介绍几个 HTML5/CSS3 的演示工具和框架,你能够用它们来创建你的网 ...

  4. 【转】UiAutomator简要介绍

    原文地址:http://blog.csdn.net/g19920917/article/details/16131565 3.1.必备条件: 1.JDK    2.SDK(API高于15)    3. ...

  5. SharePoint 2013 搜索SharePoint 特定列和特定文档(自己定义搜索)

    SharePoint 2013 搜索SharePoint 特定列和特定文档 1,操作步骤和图例,因语言和版本号的不同 我尽量使用抓图方式. 2.  In Central Administration, ...

  6. AFNetworking3.0 POST请求

    // 请求管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer ...

  7. IOS中TableView的用法

    一.UITableView 1.数据展示的条件 1> UITableView的所有数据都是由数据源(dataSource)提供的,所以要想在UITableView展示数据,必须设置UITable ...

  8. oracle 电子商务解决方案讲义

    1. 电商营销(CRM) - 高端客户体验 2. 当当网李国庆做 "千千面"购物体验 3. 所使用的唯一的产品oracle的CRM 4. 个人的事情.谁在世界上是用户体验. 5. ...

  9. Android自己定义控件系列五:自己定义绚丽水波纹效果

    尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自己定义控件实现一个比較有趣的效果 ...

  10. HDU 1484 Basic wall maze (dfs + 记忆)

    Basic wall maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...