1.我们再ABP项目添加一个.NET Core类库  类库名自定定义, 我这里定义为 TexHong_EMWX.MongoDb

添加NuGet包。

ABP

mongocsharpdriver

添加 AbpMongoDbConfigurationExtensions.cs

 /// <summary>
/// 定义扩展方法 <see cref="IModuleConfigurations"/> 允许配置ABP MongoDB模块
/// </summary>
public static class AbpMongoDbConfigurationExtensions
{
/// <summary>
/// 用于配置ABP MongoDB模块。
/// </summary>
public static IAbpMongoDbModuleConfiguration AbpMongoDb(this IModuleConfigurations configurations)
{
return configurations.AbpConfiguration.Get<IAbpMongoDbModuleConfiguration>();
}
}

添加 AbpMongoDbModuleConfiguration.cs

 internal class AbpMongoDbModuleConfiguration : IAbpMongoDbModuleConfiguration
{
public string ConnectionString { get; set; } public string DatabaseName { get; set; }
}

添加  IAbpMongoDbModuleConfiguration

  public interface IAbpMongoDbModuleConfiguration
{
string ConnectionString { get; set; } string DatabaseName { get; set; }
}

添加 MongoDbRepositoryBase.cs

/// <summary>
/// Implements IRepository for MongoDB.
/// </summary>
/// <typeparam name="TEntity">Type of the Entity for this repository</typeparam>
public class MongoDbRepositoryBase<TEntity> : MongoDbRepositoryBase<TEntity, int>, IRepository<TEntity>
where TEntity : class, IEntity<int>
{
public MongoDbRepositoryBase(IMongoDatabaseProvider databaseProvider)
: base(databaseProvider)
{
}
}
/// <summary>
/// Implements IRepository for MongoDB.
/// </summary>
/// <typeparam name="TEntity">Type of the Entity for this repository</typeparam>
/// <typeparam name="TPrimaryKey">Primary key of the entity</typeparam>
public class MongoDbRepositoryBase<TEntity, TPrimaryKey> : AbpRepositoryBase<TEntity, TPrimaryKey>
where TEntity : class, IEntity<TPrimaryKey>
{
public virtual MongoDatabase Database
{
get { return _databaseProvider.Database; }
}
public virtual MongoCollection<TEntity> Collection
{
get
{
return _databaseProvider.Database.GetCollection<TEntity>(typeof(TEntity).Name);
}
}
private readonly IMongoDatabaseProvider _databaseProvider;
public MongoDbRepositoryBase(IMongoDatabaseProvider databaseProvider)
{
_databaseProvider = databaseProvider;
} public override IQueryable<TEntity> GetAll()
{
return Collection.AsQueryable();
} public override TEntity Get(TPrimaryKey id)
{
var query = MongoDB.Driver.Builders.Query<TEntity>.EQ(e => e.Id, id);
var entity = Collection.FindOne(query);
if (entity == null)
{
throw new EntityNotFoundException("There is no such an entity with given primary key. Entity type: " + typeof(TEntity).FullName + ", primary key: " + id);
}
return entity;
}
public override TEntity FirstOrDefault(TPrimaryKey id)
{
var query = MongoDB.Driver.Builders.Query<TEntity>.EQ(e => e.Id, id);
return Collection.FindOne(query);
}
public override TEntity Insert(TEntity entity)
{
Collection.Insert(entity);
return entity;
}
public override TEntity Update(TEntity entity)
{
Collection.Save(entity);
return entity;
}
public override void Delete(TEntity entity)
{
Delete(entity.Id);
}
public override void Delete(TPrimaryKey id)
{
var query = MongoDB.Driver.Builders.Query<TEntity>.EQ(e => e.Id, id);
Collection.Remove(query);
}
}

添加 MongoDbUnitOfWork.cs

/// <summary>
/// Implements Unit of work for MongoDB.
/// </summary>
public class MongoDbUnitOfWork : UnitOfWorkBase, ITransientDependency
{
/// <summary>
/// Gets a reference to MongoDB Database.
/// </summary>
public MongoDatabase Database { get; private set; } private readonly IAbpMongoDbModuleConfiguration _configuration; /// <summary>
/// Constructor.
/// </summary>
public MongoDbUnitOfWork(
IAbpMongoDbModuleConfiguration configuration,
IConnectionStringResolver connectionStringResolver,
IUnitOfWorkFilterExecuter filterExecuter,
IUnitOfWorkDefaultOptions defaultOptions)
: base(
connectionStringResolver,
defaultOptions,
filterExecuter)
{
_configuration = configuration;
BeginUow();
} #pragma warning disable
protected override void BeginUow()
{
//TODO: MongoClientExtensions.GetServer(MongoClient)' is obsolete: 'Use the new API instead.
Database = new MongoClient(_configuration.ConnectionString)
.GetServer()
.GetDatabase(_configuration.DatabaseName);
}
#pragma warning restore public override void SaveChanges()
{ } #pragma warning disable 1998
public override async Task SaveChangesAsync()
{ }
#pragma warning restore 1998 protected override void CompleteUow()
{ } #pragma warning disable 1998
protected override async Task CompleteUowAsync()
{ }
#pragma warning restore 1998
protected override void DisposeUow()
{ }
}

添加  UnitOfWorkMongoDatabaseProvider.cs

/// <summary>
/// Implements <see cref="IMongoDatabaseProvider"/> that gets database from active unit of work.
/// </summary>
public class UnitOfWorkMongoDatabaseProvider : IMongoDatabaseProvider, ITransientDependency
{
public MongoDatabase Database { get { return _mongoDbUnitOfWork.Database; } } private readonly MongoDbUnitOfWork _mongoDbUnitOfWork; public UnitOfWorkMongoDatabaseProvider(MongoDbUnitOfWork mongoDbUnitOfWork)
{
_mongoDbUnitOfWork = mongoDbUnitOfWork;
}
}

添加 IMongoDatabaseProvider.cs

public interface IMongoDatabaseProvider
{
/// <summary>
/// Gets the <see cref="MongoDatabase"/>.
/// </summary>
MongoDatabase Database { get; }
}

添加 TexHong_EMWXMongoDBModule.cs

/// <summary>
/// This module is used to implement "Data Access Layer" in MongoDB.
/// </summary>
[DependsOn(typeof(AbpKernelModule))]
public class TexHong_EMWXMongoDBModule : AbpModule
{
public override void PreInitialize()
{
IocManager.Register<IAbpMongoDbModuleConfiguration, AbpMongoDbModuleConfiguration>();
// 配置 MonggoDb 数据库地址与名称
IAbpMongoDbModuleConfiguration abpMongoDbModuleConfiguration = Configuration.Modules.AbpMongoDb();
abpMongoDbModuleConfiguration.ConnectionString = "mongodb://admin:123qwe@118.126.93.113:27017/texhong_em";
abpMongoDbModuleConfiguration.DatabaseName = "texhong_em";
} public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(typeof(TexHong_EMWXMongoDBModule).GetAssembly());
IocManager.Register<MongoDbRepositoryBase<User, long>>();
}
}

最后项目的架构

添加单元测试  MongoDbAppService_Tests.cs

 public class MongoDbAppService : TexHong_EMWXTestBase
{
private readonly MongoDbRepositoryBase<User,long> _mongoDbUserRepositoryBase; public MongoDbAppService()
{
this._mongoDbUserRepositoryBase = Resolve<MongoDbRepositoryBase<User, long>>();
}
[Fact]
public async Task CreateUsers_Test()
{
long Id = (DateTime.Now.Ticks - ) / ;
await _mongoDbUserRepositoryBase.InsertAndGetIdAsync(new User() { Id= Id, Name = "", EmailConfirmationCode = "", UserName = "" });
User user = _mongoDbUserRepositoryBase.Get(Id);
}
}

注意单元测试要引用 MongoDb项目。

同时在TestModule.cs属性依赖 DependsOn 把Mongodb 的 Module添加进去,不然会导致运行失败无法注入。

源码下载:https://download.csdn.net/download/liaoyide/11742718

最新文章

  1. viewPager--viewpager时,发生内存溢出OOM问题
  2. wxPython中文教程入门实例
  3. C#继承的用法
  4. POJ 2114 - Boatherds
  5. redis的hashes类型
  6. Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组
  7. Guava之简介
  8. 利用C#实现分布式数据库查询
  9. defaultdict使用及__missing__理解
  10. 指令汇B新闻客户端开发(三) 下拉刷新
  11. 网络控制器intel 82599, powerpc 830的BD描述符结构
  12. redis 的简单命令
  13. 【BZOJ4998】星球联盟
  14. Hibernate注意项
  15. (转)SVN服务器搭建和使用(三) 附vs2013 svn插件
  16. mysql数据添加时如果这条数据存在进行修改
  17. windows 虚拟机VMware 安装linux系统注意事项!!!
  18. BZOJ5073 小A的咒语(动态规划)
  19. edm 邮件制作指南
  20. 【二分】【P1314】 【NOIP2011D2T2】聪明的质监员

热门文章

  1. Java编程思想之八多态
  2. Behavior Trees for Path Planning (Autonomous Driving)
  3. Python10大热门项目
  4. sublime的注册方法 非常好用
  5. pan wutong团队隐私协议
  6. 在日志中记录Java异常信息的正确姿势
  7. fidder配置 https设置 手机客户端
  8. Mobaxterm使用(类似xshell)
  9. 从ArcGIS连接Oracle数据库,并将Oracle数据库注册到ArcGIS Server
  10. Java并发编程核心概念一览