OsharpNS 轻量级. net core 快速开发框架简明入门教程
教程目录
从零开始启动 Osharp
1.1. 使用 OsharpNS 项目模板创建项目 https://www.cnblogs.com/candoo/p/10773735.html#1
1.2. 配置数据库连接串并启动项目 https://www.cnblogs.com/candoo/p/10773735.html#2
1.3. OsharpNS.Swagger 使用实例 (登录和授权) https://www.cnblogs.com/candoo/p/10773735.html#3
1.4. Angular6 的前端项目启动 https://www.cnblogs.com/candoo/p/10773735.html#4
Osharp 代码生成器的使用
2.1 生成器的使用 https://www.cnblogs.com/candoo/p/10778631.html
2.2 生成代码详解 (如何自己实现业务功能) https://www.cnblogs.com/candoo/p/10782102.html
Osharp 部分模块使用
3.1 Osharp.Redis 使用 https://www.cnblogs.com/candoo/p/10790121.html
3.2 Osharp.Hangfire 使用 https://www.cnblogs.com/candoo/p/10795095.html
3.3 Osharp.Permissions 使用 https://www.cnblogs.com/candoo/p/10811384.html
Osharp 深度学习和使用
4.1 切换数据库 (从 SqlServer 改为 MySQL) https://www.cnblogs.com/candoo/p/10811550.html
4.2 多上下文配置 (多个数据库的使用) https://www.cnblogs.com/candoo/p/10817573.html
4.3. 自定义模块的定义 (Senparc.Weixin 的使用)
4.4. 继续学习中....
OsharpNS 官方资源
项目地址: https://github.com/i66soft/osharp-ns20
演示地址: https://www.osharp.org/ 直接使用 QQ 登录可以查看效果
文档地址: https://docs.osharp.org/ 正在完善中....
发布博客: 大神看这个文档应该就能跑起来, 从零开始启动 Osharp 基于此文档完成
VS 生成器插件:
官方交流 QQ 群: 85895249
多上下文配置 (多个数据库的使用)
项目 CanDoo.Test.Core 通过 Nuget 添加对包 OsharpNS 的引用
配置文件 appsettings.Development.JSON 中添加 OSharp:DbContexts:MySqlAudit 连接参数
- "MySqlAudit": {
- "DbContextTypeName": "CanDoo.Test.Core.Entity.MySqlAuditDbContext,OSharp.EntityFrameworkCore",// 这里要注意下
- "ConnectionString": "Server=localhost;Port=3306;UserId=root;Password=******;Database=CanDoo.Test.Audit;charset='utf8';Allow User Variables=True",
- "DatabaseType": "MySql",
- "LazyLoadingProxiesEnabled": true,
- "AuditEntityEnabled": true,
- "AutoMigrationEnabled": true
- }
新建
CanDoo.Test.Core.Entity.MySqlAuditDbContext
上下文
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Microsoft.EntityFrameworkCore;
- using OSharp.Entity;
- namespace CanDoo.Test.Core.Entity
- {
- public class MySqlAuditDbContext : DbContextBase
- {
- public MySqlAuditDbContext(DbContextOptions options, IEntityManager entityManager, IServiceProvider serviceProvider) : base(options, entityManager, serviceProvider)
- {
- }
- }
- }
创建
CanDoo.Test.web.Startups.MySqlAuditMigrationPack
迁移模块
- using System;
- using OSharp.Entity;
- using OSharp.Entity.MySQL;
- using CanDoo.Test.Core.Entity;
- using CanDoo.Test.Web.Startups;
- namespace CanDoo.Test.Web.Startups
- {
- /// <summary>
- /// MySqlAudit 迁移模块
- /// </summary>
- public class MySqlAuditMigrationPack : MigrationPackBase<MySqlAuditDbContext>
- {
- /// <summary>
- /// 获取 模块启动顺序, 模块启动的顺序先按级别启动, 级别内部再按此顺序启动,
- /// 级别默认为 0, 表示无依赖, 需要在同级别有依赖顺序的时候, 再重写为 > 0 的顺序值
- /// </summary>
- public override int Order => 2;
- protected override DatabaseType DatabaseType { get; } = DatabaseType.MySQL;
- protected override MySqlAuditDbContext CreateDbContext(IServiceProvider scopedProvider)
- {
- return new MySqlAuditDesignTimeDbContextFactory(scopedProvider).CreateDbContext(new string[0]);
- }
- // 针对多库连接的, 需要在 EntityConfiguration 部分增加以下代码, 指定 DbContext
- //public override Type DbContextType { get; } = typeof(MySqlAuditDbContext);
- }
- }
- using System;
- using System.Reflection;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using OSharp.Core.Options;
- using OSharp.Data;
- using OSharp.Entity;
- using OSharp.Exceptions;
- using OSharp.Extensions;
- using OSharp.Reflection;
- using CanDoo.Test.Core.Entity;
- namespace CanDoo.Test.Web.Startups
- {
- public class MySqlAuditDesignTimeDbContextFactory : DesignTimeDbContextFactoryBase<MySqlAuditDbContext>
- {
- private readonly IServiceProvider _serviceProvider;
- public MySqlAuditDesignTimeDbContextFactory()
- { }
- public MySqlAuditDesignTimeDbContextFactory(IServiceProvider serviceProvider)
- {
- _serviceProvider = serviceProvider;
- }
- public override string GetConnectionString()
- {
- if (_serviceProvider == null)
- {
- IConfiguration configuration = Singleton<IConfiguration>.Instance;
- string str = configuration["OSharp:DbContexts:MySqlAudit:ConnectionString"]; // 这里是配置节点的信息 记得修改
- return str;
- }
- OsharpOptions options = _serviceProvider.GetOSharpOptions();
- OsharpDbContextOptions contextOptions = options.GetDbContextOptions(typeof(DefaultDbContext));
- if (contextOptions == null)
- {
- throw new OsharpException($"上下文"{typeof(MySqlAuditDbContext)}"的配置信息不存在");
- }
- return contextOptions.ConnectionString;
- }
- public override IEntityManager GetEntityManager()
- {
- if (_serviceProvider != null)
- {
- return _serviceProvider.GetService<IEntityManager>();
- }
- IEntityConfigurationTypeFinder typeFinder = new EntityConfigurationTypeFinder(new AppDomainAllAssemblyFinder());
- IEntityManager entityManager = new EntityManager(typeFinder);
- entityManager.Initialize();
- return entityManager;
- }
- public override bool LazyLoadingProxiesEnabled()
- {
- if (_serviceProvider == null)
- {
- IConfiguration configuration = Singleton<IConfiguration>.Instance;
- return configuration["OSharp:DbContexts:MySqlAudit:LazyLoadingProxiesEnabled"].CastTo(false); // 这里是配置节点的信息 记得修改
- }
- OsharpOptions options = _serviceProvider.GetOSharpOptions();
- OsharpDbContextOptions contextOptions = options.GetDbContextOptions(typeof(DefaultDbContext));
- if (contextOptions == null)
- {
- throw new OsharpException($"上下文"{typeof(MySqlAuditDbContext)}"的配置信息不存在");
- }
- return contextOptions.LazyLoadingProxiesEnabled;
- }
- public override DbContextOptionsBuilder UseSql(DbContextOptionsBuilder builder, string connString)
- {
- string entryAssemblyName = Assembly.GetExecutingAssembly().GetName().Name;
- Console.WriteLine($"entryAssemblyName: {entryAssemblyName}");
- return builder.UseMySql(connString, b => b.MigrationsAssembly(entryAssemblyName));
- }
- }
- }
审计功能相关的表使用新的上下文,
CanDoo.Test.EntityConfiguration.Systems
中 Audit 开头的 3 个文件都增加以下配置代码, 指定使用 MySqlAuditDbContext
- public override Type DbContextType { get; } = typeof(MySqlAuditDbContext); // 新增此行代码 指定使用 MySqlAuditDbContext 未指定的还是使用 DefaultDbContext
- using System;
- using System.Collections.Generic;
- using System.Text;
- using CanDoo.Test.Core.Entity;
- using CanDoo.Test.Systems.Entities;
- using Microsoft.EntityFrameworkCore.Metadata.Builders;
- using OSharp.Entity;
- namespace CanDoo.Test.EntityConfiguration.Systems
- {
- public class AuditPropertyConfiguration : EntityTypeConfigurationBase<AuditProperty, Guid>
- {
- public override Type DbContextType { get; } = typeof(MySqlAuditDbContext); // 新增此行代码 指定使用 MySqlAuditDbContext 未指定的还是使用 DefaultDbContext
- /// <summary>
- /// 重写以实现实体类型各个属性的数据库配置
- /// </summary>
- /// <param name="builder"> 实体类型创建器 </param>
- public override void Configure(EntityTypeBuilder<AuditProperty> builder)
- {
- builder.HasIndex(m => m.AuditEntityId);
- builder.HasOne(m => m.AuditEntity).WithMany(n => n.Properties).HasForeignKey(m => m.AuditEntityId);
- }
- }
- }
在程序包管理控制台中执行 Add-Migration -Context MySqlAuditDbContext newDbContext, 创建迁移脚本, 因系统中存在 2 个 DbContext, 所以需要指定上下文 - Context MySqlAuditDbContext
在程序包管理控制台中执行 update-database -Context MySqlAuditDbContext
至此, 数据库中新生成了一个库, 库中包含用于审计功能的三张表
来源: http://www.bubuko.com/infodetail-3048311.html