OsharpNS輕量級.net core快速開發框架簡明入門教程
教程目錄
-
從零開始啟動Osharp
1.1. 使用OsharpNS項目模板創建項目
1.2. 配置數據庫連接串並啟動項目
1.3. OsharpNS.Swagger使用實例(登錄和授權)
1.4. Angular6的前端項目啟動
-
Osharp代碼生成器的使用
2.1 生成器的使用
-
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
-
至此,數據庫中新生成了一個庫,庫中包含用於審計功能的三張表