MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 四
本次改动主要实现MongoGridFS功能。实现方式主要使用了MongoGridFS和MongoGridFSFileInfo两个类。
设计思路:定义一个IMongoFile接口并继承IEntity,以实现主要的文件操作。该接口的设计主要参考MongoGridFSFileInfo的属性,以尽量满足在保存文件时各种所需。
public interface IMongoFile : IEntity
{
/// <summary>
/// remote file name
/// </summary>
string RemoteFileName { get; set; }
/// <summary>
/// local file name
/// </summary>
string LocalFileName { get; set; }
/// <summary>
/// data
/// </summary>
byte[] Data { get; }
/// <summary>
/// MD5
/// </summary>
string MD5 { get; }
/// <summary>
/// content type
/// </summary>
string ContentType { get; }
/// <summary>
/// size
/// </summary>
int Size { get; }
/// <summary>
/// alias
/// </summary>
string[] Aliases { get; }
/// <summary>
/// metadata
/// </summary>
BsonDocument Metadata { get; set; }
/// <summary>
/// upload date
/// </summary>
DateTime UploadDate { get; set; }
/// <summary>
/// add alias
/// </summary>
/// <param name="alias">alias</param>
void AddAlias(string alias);
/// <summary>
/// add aliases
/// </summary>
/// <param name="aliases">aliases</param>
void AddAliases(string[] aliases);
/// <summary>
/// download file
/// </summary>
/// <param name="localFileName">abs file full path</param>
void Download(string localFileName);
/// <summary>
/// download file
/// </summary>
/// <param name="stream">file stream</param>
void Download(Stream stream);
}
MongoFile是该接口的实现。MongoFile主要有三个带参构造函数
MongoDB.Repository.MongoFile.MongoFile(string, string, string)
MongoDB.Repository.MongoFile.MongoFile(System.IO.Stream, string, string)
MongoDB.Repository.MongoFile.MongoFile(MongoDB.Driver.GridFS.MongoGridFSFileInfo)
前两个均为上传时使用,用以初始构造,调用IMongoFile.Save()后将文件保存。用例如下:
IMongoFile file = MongoEntity.CreateFile(@"c:\pic1.jpg", "pic1.jpg", "jpg");
file.Save();
另在MongoEntity中增加了一些公共方法,用以查询、删除和下载文件。如:
void MongoDB.Repository.MongoEntity.DownloadFile(string, string)
void MongoDB.Repository.MongoEntity.DownloadFile(string, System.IO.Stream)
void MongoDB.Repository.MongoEntity.RemoveFile(string)
void MongoDB.Repository.MongoEntity.RemoveFiles(string)
IMongoFile MongoDB.Repository.MongoEntity.LoadFile(string)
List<IMongoFile> MongoDB.Repository.MongoEntity.LoadAllFiles(string)
RemoveFile和RemoveFiles的区别在于RemoveFile的参数是id,而RemoveFiles的参数是romoteFileName,因为在MongoDB中,文件名是可以重复的,不能重复的是id。
所以也就有了LoadFile和LoadFiles。 下面提供一个简单的使用案例:
IMongoFile file = MongoEntity.CreateFile(@"c:\pic1.jpg", "pic1.jpg", "jpg");
file.Save();
IMongoFile fs = MongoEntity.LoadFile(file.Id);
fs.Download(@"c:\a.jpg");
var files = MongoEntity.LoadAllFiles("test.xml");
MongoEntity.DownloadFile(file.Id, @"c:\copy.jpg");
MongoEntity.RemoveFile(file.Id);
至此,MongoDB.Repository的主要功能已经完成。欢迎大家在使用时提出意见。该框架还会不断地完善,敬请关注。
MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 四的更多相关文章
- MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 一
本人系新接触MongoDB不久,属于MongoDB的菜鸟范畴.在使用MongoDB的过程中,总结了一些认识,在此总结跟大家分享.欢迎拍砖. 关于MongoDB的内容,在此就不做介绍了,网上有浩如烟海的 ...
- MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 三
本次改动的主要内容是实现MongoDB.Repository在MongoDB中建立索引. 建立索引主要使用MongoDB的官方驱动中EnsureIndex方法. 在MongoDB.Repository ...
- MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 六:支持多数据库操作
本次主要内容:修正MongoDB.Repository框架对多数据库的支持. 在之前的五篇文章中对MongoDB.Repository框架做了简单的介绍是实现思路.之前是考虑MongoDB.Repos ...
- MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 二
本次改动的主要内容是实现MongoDB.Repository对MongoDBRef的支持. MongoDB对一对一,一对多,多对多关系的维护,官方推荐文档嵌入方式,反映到模型的设计如下: public ...
- MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 五 --- 为List<MongoDBRef>增加扩展方法
本次改动主要内容:为List<MongoDBRef>增加扩展方法 在MongoDB.Repository的使用过程中,发现在一个类中只定义一个List<MongoDBRef>是 ...
- MongoDB Python官方驱动 PyMongo 的简单封装
最近,需要使用 Python 对 MongodB 做一些简单的操作,不想使用各种繁重的框架.出于可重用性的考虑,想对 MongoDB Python 官方驱动 PyMongo 做下简单封装,百度一如既往 ...
- 在.net下打造mongoDb基于官方驱动最新版本
还是一如既往先把结构图放出来,上上个版本添加了redis的缓存,但是不满足我的需求,因为公司有项目要求是分布式所以呢,这里我就增加了mongoDb进行缓存分布式,好了先看结构图. 总的来说比较蛋疼,因 ...
- 使用MongoDB C#官方驱动操作MongoDB
想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动有很多种,如官方提供的,samus. 实现思路大都类似.这里我们先用官方提供的mongo-csharp-dri ...
- 在C#中使用官方驱动操作MongoDB
MongoDB的官方驱动下载地址:https://github.com/mongodb/mongo-csharp-driver/releases 目前最新的版本是2.10,支持.NET 4.5以上.由 ...
随机推荐
- Linq实现对XML的简单增删查改
一.传统DOM创建XML方法 private static void CreateXmlDocWithDom() { XmlDocument doc =new XmlDocument(); XmlEl ...
- Mac+PhpStorm+XAMPP+Xdebug
Mac+PhpStorm+XAMPP+Xdebug 环境的配置 在上一篇 PHP 系列的文章<PHP 集成开发环境比较>中,我根据自己的亲身体验,非常简略的介绍和对比了几款常用的集成开 ...
- eclipese with gdbserver and Jlink configuration
最近的项目,很感动于linux和gdbserver内容,I think must write something to record it . 各位对不起,图片挂了.. Ok, at first I' ...
- oracle处理节点之间的父子关系
通常当与树的结构之间的关系处理,这是一个很复杂的事情,我们可以通过程序代码去逐层遍历父或子节点,这样做的缺点是很明显,效率不高,操作复杂性是比较大的.而当我们使用Oracle当数据库,我们可以有一个简 ...
- SOA一些资料
SOA相关资料整理分享 2015-03-26 16:16 by 蘑菇先生, 693 阅读, 9 评论, 收藏, 编辑 昨@幸福框架同学问能否推荐SOA一些资料.想想之前看过不少资料文档,就整理分享下. ...
- 类的构造函数 this 关键字
今天研究了一下mvc 的绑定脚本,绑定样式类. 看了下源码,里面有一个 构造函数里面 有一个 this 关键字.我想,怎么我的项目没有用到呢. 于是做了一个例子示范了一下. using System; ...
- 音乐TV2015校园招聘A第二大发行量(对中国科学院大学站)
标题叙述性说明:鉴于阵列A,尺寸n,数组元素1至n数位,但是,一些数字多次出现,有些数字不出现.请设计算法和程序.统计数据不会出现什么.什么号码多次出现. 您可以O(n)时间复杂度,O(1)求下完毕么 ...
- WPF中的CheckBox的_ (underscore / 下划线)丢失
今天在项目中遇到check box的Content的内容缺少'_', 原因是WPF的ContentPresenter默认会把'_'作为加速键的转义字符. 比方CheckBox的content为&qu ...
- 设置CentOS开机连接网络 Centos 开机启动网卡的设置方法
我们开机网卡不能启动所以只能使用 ifup eth0 (eth0指的网卡) 来启动了,但是每一次都这样感觉不方便希望开机自动启动网卡 后来百度搜索了一下发现可以通过修改网卡( ifcfg-eth0)参 ...
- jq入门--选择器
选择器是JQuery一大特色,所有的DOM操作.事件操作.Ajax操作都离不开选择器.熟练掌握JQuery的选择器,可以节省很多代码,很大程序上简化我们的脚本编程工作. JQuery的选择器很类似于样 ...