转载

ABP结合MongoDB的使用范例

ASP.NET Boilerplate官方的范例都是基于Entity Framework和NHibernate的,说是支持MangoDB,源码中也确实有MangoDB,但用Google寻遍世界也没找到任何说明或范例,无奈只有自己摸索了。

由于是刚刚接触ABP,测试时举步维艰,总算是得以达成,以下总结记录下这得来不易的成果:

首先前往官网去下载模板:

http://www.aspnetboilerplate.com/Templates

选项如下:

ABP结合MongoDB的使用范例

下载好之后解压缩,用VS打开。

这时管理解决方案的NuGet包:

ABP结合MongoDB的使用范例

执行还原命令:

ABP结合MongoDB的使用范例

慢慢等待其自动下载和安装。

下好之后关闭NuGet窗口,执行重新生成解决方案操作,全部编译成功即可。

然后去其github空间:

https://github.com/aspnetboilerplate

使用Git下载 aspnetboilerplate 项目的源码到本地,其地址为: https://github.com/aspnetboilerplate/aspnetboilerplate.git

下载好源码之后,添加现有项目:

ABP结合MongoDB的使用范例

选取这个 Abp.MongoDB 项目:

ABP结合MongoDB的使用范例

再度管理解决方案的NuGet程序包,将Abp包分配给MongoDB项目:

ABP结合MongoDB的使用范例

而后单独管理 Abp.MongoDB 项目的NuGet程序包:

ABP结合MongoDB的使用范例

联机搜索MongoDB,安装:

ABP结合MongoDB的使用范例

安装之后重新生成解决方案,确认全部编译通过。

现在重新命名 MyProject.EntityFramework 项目为 MyProject.MongoDB:

ABP结合MongoDB的使用范例

管理其项目引用,勾选Abp.MongoDB项目:

ABP结合MongoDB的使用范例

管理 MyProject.MongoDB 项目的NuGet包,卸载 Abp.EntityFramework,注意对话框点“否”:

ABP结合MongoDB的使用范例

接着卸载EntityFramework.DynamicFilters,注意对话框点“是”:

ABP结合MongoDB的使用范例

然后删除项目中的这三个文件:

ABP结合MongoDB的使用范例

顺手将 EntityFramework 目录改名为 MongoDB :

ABP结合MongoDB的使用范例

修改 MyProjectDataModule.cs 的代码为:

using System.Reflection; using Abp.Modules; using Abp.MongoDb; using Abp.Configuration.Startup; namespace MyProject {  [DependsOn(typeof(AbpMongoDbModule), typeof(MyProjectCoreModule))]  public class MyProjectDataModule : AbpModule  {   public override void PreInitialize()   {    Configuration.DefaultNameOrConnectionString = "Default";    //MongoDB数据库地址    Configuration.Modules.AbpMongoDb().ConnectionString = "mongodb://localhost";    //MongoDB数据库名称    Configuration.Modules.AbpMongoDb().DatatabaseName = "MyProject";   }   public override void Initialize()   {    IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());   }  } } 

然后去 MyProject.Core 项目中创建实体类 Book ,代码如下:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Abp.Domain.Entities.Auditing;  namespace MyProject {     public class Book : AuditedEntity<Guid>     {         public string Name { get; set; }         public double Price { get; set; }     } }

再在 MyProject.Core 项目中创建其对应的仓储类 IBookRepository :

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Abp.Domain.Repositories;  namespace MyProject {     public interface IBookRepository : IRepository<Book, Guid>     {     } }

回到 MyProject.MongoDB 项目,在其 MongoDB/Repositories 目录下创建 BookRepository 类以实现先前定义的接口:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Abp.MongoDb; using Abp.MongoDb.Repositories; namespace MyProject.MongoDB.Repositories {  public class BookRepository : MongoDbRepositoryBase<Book, Guid>, IBookRepository  {   public BookRepository(IMongoDatabaseProvider databaseProvider)    : base(databaseProvider)   {   }  } } 

转到 MyProject.Application 项目,在其中创建 BookService 目录,然后在里面创建 IBookAppService 应用服务接口:

using Abp.Application.Services;  namespace MyProject.BookService {     public interface IBookAppService : IApplicationService     {         void Creat();     } }

同目录下再创建该接口的实现类 BookAppService :

namespace MyProject.BookService {  public class BookAppService : MyProjectAppServiceBase, IBookAppService  {   private readonly IBookRepository _bookRepository;   public BookAppService(IBookRepository bookRepository)   {    _bookRepository = bookRepository;   }   public void Creat()   {    var data = new Book()    {     Name = "一本新书",     Price = 99.99    };    _bookRepository.Insert(data);   }  } } 

现在修改 MyProject.Web 项目中 HomeController 类的代码:

using System.Web.Mvc; using Abp.Dependency; using MyProject.BookService; namespace MyProject.Web.Controllers {  public class HomeController : MyProjectControllerBase  {   public ActionResult Index()   {    IocManager.Instance.Resolve<IBookAppService>().Creat();    return View();   }  } } 

我们在返回View之前执行了一下刚才我们编写的创建 Book 的代码,这样就会在我们访问网站主页时,自动添加一个新的 Book 类型数据到 MongoDB 数据库了。

可以看到我们只需要调用 Ioc 管理器创建应用服务接口对应的实例,即可获得之,创建实例时的一系列层叠嵌套的构造函数参数都由 Ioc 管理器自动创建。

此时将 MyProject.Web 项目设为启动项,然后运行,看到网站主页正常显示后,使用MongoVUE查看一下MongoDB数据,就能看到新增的 MyProject 数据库和 Book 集合了,集合中有我们新增的这1项数据:

ABP结合MongoDB的使用范例

至此完成。

解决方案的主要改动文件大致如此:

ABP结合MongoDB的使用范例

提示:ABP默认的依赖注入映射规则好像对非英文字符支持的不好,之前尝试用中文命名类时遇到了问题,所以尽量还是老老实实用英文命名吧。

源码下载: http://vdisk.weibo.com/s/t2jT2xwNFVv

正文到此结束
Loading...