2023年7月18日发(作者:)
ABP结合MongoDB集成依赖注⼊1.我们再ABP项⽬添加⼀个.NET Core类库 类库名⾃定定义, 我这⾥定义为 TexHong_b添加NuGet包。ABPmongocsharpdriver
添加 /// /// 定义扩展⽅法 允许配置ABP MongoDB模块 /// public static class AbpMongoDbConfigurationExtensions { /// /// ⽤于配置ABP MongoDB模块。 /// public static IAbpMongoDbModuleConfiguration AbpMongoDb(this IModuleConfigurations configurations) { return (); } }添加 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; } }
添加 /// /// Implements IRepository for MongoDB. /// /// Type of the Entity for this repository public class MongoDbRepositoryBase : MongoDbRepositoryBase, IRepository where TEntity : class, IEntity { public MongoDbRepositoryBase(IMongoDatabaseProvider databaseProvider) : base(databaseProvider) { } } /// /// Implements IRepository for MongoDB. /// /// Type of the Entity for this repository /// Primary key of the entity public class MongoDbRepositoryBase : AbpRepositoryBase where TEntity : class, IEntity { public virtual MongoDatabase Database { get { return _se; } } public virtual MongoCollection Collection { get { return _lection(typeof(TEntity).Name); } } private readonly IMongoDatabaseProvider _databaseProvider; public MongoDbRepositoryBase(IMongoDatabaseProvider databaseProvider) { _databaseProvider = databaseProvider; } public override IQueryable GetAll() { return yable(); } public override TEntity Get(TPrimaryKey id) { var query = .EQ(e => , id); var entity = e(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 = .EQ(e => , id); return e(query); } public override TEntity Insert(TEntity entity) { (entity); return entity; } public override TEntity Update(TEntity entity) { (entity); return entity; } public override void Delete(TEntity entity) { Delete(); } public override void Delete(TPrimaryKey id) { var query = .EQ(e => , id); (query); } }添加
/// /// Implements Unit of work for MongoDB. /// public class MongoDbUnitOfWork : UnitOfWorkBase, ITransientDependency { /// /// Gets a reference to MongoDB Database. /// public MongoDatabase Database { get; private set; } private readonly IAbpMongoDbModuleConfiguration _configuration; /// /// Constructor. /// 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: ver(MongoClient)' is obsolete: 'Use the new API instead. Database = new MongoClient(_tionString) .GetServer() .GetDatabase(_seName); }#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() { } }添加 /// /// Implements that gets database from active unit of work. /// public class UnitOfWorkMongoDatabaseProvider : IMongoDatabaseProvider, ITransientDependency { public MongoDatabase Database { get { return _se; } } private readonly MongoDbUnitOfWork _mongoDbUnitOfWork; public UnitOfWorkMongoDatabaseProvider(MongoDbUnitOfWork mongoDbUnitOfWork) { _mongoDbUnitOfWork = mongoDbUnitOfWork; } }添加 ic interface IMongoDatabaseProvider { /// /// Gets the . /// MongoDatabase Database { get; } }添加 TexHong_
/// /// This module is used to implement "Data Access Layer" in MongoDB. /// [DependsOn(typeof(AbpKernelModule))] public class TexHong_EMWXMongoDBModule : AbpModule { public override void PreInitialize() { er();
// 配置 MonggoDb 数据库地址与名称 IAbpMongoDbModuleConfiguration abpMongoDbModuleConfiguration = goDb(); tionString = "mongodb://admin:123qwe@118.126.93.113:27017/texhong_em"; seName = "texhong_em"; } public override void Initialize() { erAssemblyByConvention(typeof(TexHong_EMWXMongoDBModule).GetAssembly());
er>(); } }最后项⽬的架构
添加单元测试 MongoDbAppService_
public class MongoDbAppService : TexHong_EMWXTestBase { private readonly MongoDbRepositoryBase _mongoDbUserRepositoryBase;
public MongoDbAppService() { this._mongoDbUserRepositoryBase = Resolve>(); } [Fact] public async Task CreateUsers_Test() { long Id = ( - 6200000) / 10000;
await _AndGetIdAsync(new User() { Id= Id, Name = "123", EmailConfirmationCode = "1111", UserName = "2222" }); User user = _(Id); }
}注意单元测试要引⽤ MongoDb项⽬。同时在属性依赖 DependsOn 把Mongodb 的 Module添加进去,不然会导致运⾏失败⽆法注⼊。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689647865a273571.html
评论列表(0条)