教程目錄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
至此,數據庫中新生成了一個庫,庫中包含用於審計功能的三張表