教程目录html
从零开始启动Osharp前端
1.1. 使用OsharpNS项目模板建立项目git
1.2. 配置数据库链接串并启动项目github
1.3. OsharpNS.Swagger使用实例(登陆和受权)数据库
1.4. Angular6的前端项目启动json
Osharp代码生成器的使用app
2.1 生成器的使用框架
2.2 生成代码详解(如何本身实现业务功能)ide
Osharp部分模块使用学习
3.1 Osharp.Redis使用
Osharp深度学习和使用
4.2 多上下文配置(多个数据库的使用)
4.3. 自定义模块的定义(Senparc.Weixin的使用)
4.4. 继续学习中....
OsharpNS官方资源
项目地址:https://github.com/i66soft/osharp-ns20
演示地址:https://www.osharp.org 直接使用QQ登陆能够查看效果
文档地址:https://docs.osharp.org 正在完善中....
发布博客:https://www.cnblogs.com/guomingfeng/p/osharpns-publish.html 大神看这个文档应该就能跑起来,从零开始启动Osharp基于此文档完成
VS生成器插件:https://marketplace.visualstudio.com/items?itemName=LiuliuSoft.osharp
官方交流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
至此,数据库中新生成了一个库,库中包含用于审计功能的三张表