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

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

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

http://www.aspnetboilerplate.com/Templates

选项如下:

image

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

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

image

执行还原命令:

image

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

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

然后去其github空间:

https://github.com/aspnetboilerplate

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

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

image

选取这个 Abp.MongoDB 项目:

image

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

image

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

image

联机搜索MongoDB,安装:

image

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

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

image

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

image

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

image

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

image

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

image

顺手将 EntityFramework 目录改名为 MongoDB :

image

修改 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项数据:

image

至此完成。

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

image

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

 

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

转载此文章时须注明转载自”SkyD(斯克迪亚)开发者博客“,并保留此文章的Url链接

作者信息

昵称
斯克迪亚

查看其所发布的所有文章

总积分
2420
注册时间
(2018年5月4日 19:06)

评论

目前还没有任何评论。

[切换到移动版页面]