本次改动主要实现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框架 四的更多相关文章

  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框架对多数据库的支持. 在之前的五篇文章中对MongoDB.Repository框架做了简单的介绍是实现思路.之前是考虑MongoDB.Repos ...

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

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

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

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

  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. SD3.0四个协议解读

    前面的文章提到过SD卡主要分为两个操作模式,一是初始化和识别操作模式.还有一种就是这篇文章须要分析的传输数据模式啦. 传输数据模式: 传输数据模式主要有六种状态,各自是Stand-by状态.Trans ...

  2. 词组缩写(isalpha()的应用)

    Problem Description 定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写.比如,C语言里常用的EOF就是end of file的缩写.   Input 输入的第一行是一个整数 ...

  3. Routing路由

    Routing路由 新版Routing功能介绍 在ASP.NET 5和MVC6中,Routing功能被全部重写了,虽然用法有些类似,但和之前的Routing原理完全不太一样了,该Routing框架不仅 ...

  4. jQuery中的 return false, e.preventDefault(), e.stopPropagation()的区别

    e.stopPropagation()阻止事件冒泡 <html><head>     <title></title>     <script sr ...

  5. 用fildder 查看loveuv 刷流量时通信的数据

    loveuv是一个用来刷网页流量的站点,以下介绍怎么查看它刷流量时数据的传输 首先是注冊页面,邀请码UBMNEY 注冊账号登陆后,在账户资料页面http://www.loveuv.com/user/m ...

  6. hdu(2062)-Subset sequence 组合数学

    意甲冠军:查找集合{1,2,3...n}第一m一个排列子. 收集的线索所行的大小. 例两个元素的排列子集合按字典树排列是:{1},{1,2},{2},{2,1}: 解法:一个一个元素来确定,每次把剩余 ...

  7. Android锁定EditText内容和随机生成验证码

    昨天写了个小Demo,实现了随机生成验证码,和锁定EditText两个小功能,先看一下效果图: 锁定EditText在我们不须要用户编辑EditText内容的时候能够用到,实现还是非常easy的,一行 ...

  8. asp.net mvc3 数据验证(四)—Remote验证的一个注意事项

    原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项         前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我 ...

  9. 阅读安卓在线(Android)系统源代码

    http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 版权声明:本文博客原创 ...

  10. jQuery验证插件

    原文:jQuery验证插件 学习要点: 1.使用 validate.js 插件 2.默认验证规则 3.validate()方法和选项 4.validate.js 其他功能 验证插件(validate. ...