ASP.NET Boilerplate官方的范例都是基于Entity Framework和NHibernate的,说是支持MangoDB,源码中也确实有MangoDB,但用Google寻遍世界也没找到任何说明或范例,无奈只有自己摸索了。
由于是刚刚接触ABP,测试时举步维艰,总算是得以达成,以下总结记录下这得来不易的成果:
首先前往官网去下载模板:
http://www.aspnetboilerplate.com/Templates
选项如下:
下载好之后解压缩,用VS打开。
这时管理解决方案的NuGet包:
执行还原命令:
慢慢等待其自动下载和安装。
下好之后关闭NuGet窗口,执行重新生成解决方案操作,全部编译成功即可。
然后去其github空间:
https://github.com/aspnetboilerplate
使用Git下载 aspnetboilerplate 项目的源码到本地,其地址为: https://github.com/aspnetboilerplate/aspnetboilerplate.git
下载好源码之后,添加现有项目:
选取这个 Abp.MongoDB 项目:
再度管理解决方案的NuGet程序包,将Abp包分配给MongoDB项目:
而后单独管理 Abp.MongoDB 项目的NuGet程序包:
联机搜索MongoDB,安装:
安装之后重新生成解决方案,确认全部编译通过。
现在重新命名 MyProject.EntityFramework 项目为 MyProject.MongoDB:
管理其项目引用,勾选Abp.MongoDB项目:
管理 MyProject.MongoDB 项目的NuGet包,卸载 Abp.EntityFramework,注意对话框点“否”:
接着卸载EntityFramework.DynamicFilters,注意对话框点“是”:
然后删除项目中的这三个文件:
顺手将 EntityFramework 目录改名为 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默认的依赖注入映射规则好像对非英文字符支持的不好,之前尝试用中文命名类时遇到了问题,所以尽量还是老老实实用英文命名吧。
源码下载: http://vdisk.weibo.com/s/t2jT2xwNFVv