在以前的五篇文章中對MongoDB.Repository框架作了簡單的介紹是實現思路。以前是考慮MongoDB.Repository框架是能夠同時支持多數據,且已實現支持多數據庫。但有個前提:實體的類型不能重複,即一個實體類型(即命名空間同樣)只能存在一個數據庫中。舉例,X實體,若是註冊在了A數據庫,那麼將不能註冊在B數據庫中。git
雖然實現了該功能,可是存在一些問題和不足:github
問題:只有在使用具體的實例進行數據庫操做時纔會提示異常,且異常信息不清楚。數據庫
不足:文件操做還未能支持多數據庫,由於以前的版本對IMongoFile沒有在IMongoDBContext上下文進行註冊,全部的文件都會保存到一個數據庫中。安全
固然以上的問題,若是不須要支持多數據庫,那麼也就不存在這些問題。而在實際的設計中,卻很難避免。好比咱們若是要作一個簡單的平臺,出於安全、獨立等因素,用戶信息和應用信息應該是分開的數據庫部署。框架
本次修正內容:ide
A:將實體註冊放置在上下文註冊以前,即在註冊上下文以前,首先要檢查該上下文中註冊的實體是否已經被其它上下文註冊過。spa
B:IMongoFile的實體也須要在上下文中進行註冊,不能對未註冊的文件類型進行操做。並將MongoFile設置爲abstract class,以保證註冊流程。設計
下面給出一個具體的註冊案例:xml
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進行了屢次註冊,在此會拋出類型屢次註冊異常
若是須要使用文件,那麼文件實體也同樣須要註冊,這在以前的版本並不是強制,也存在必定的問題:blog
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");
以上列出了一些文件的簡單操做,並非所有,每一個方法也有不一樣程度的重載,並在之後根據實際使用狀況會逐步的增長。