.NET 9.0 的 Blazor Web App 项目,自定义日志 TLog V2 使用备忘

一、TLog V1 使用静态数据库上下文,优点是速度快,缺点是内存占用大,参见 .NET 9.0 的 Blazor Web App 项目、Bootstrap Blazor 组件库、自定义日志 TLog 使用备忘_navigationmanager.tobaserelativepath-CSDN博客

 

二、 TLog V2 改为 依赖注入 方式,优点、缺点 与 V1 相反,使用方法与 V1 相同。

namespace BlazorWebAppNet9Shared.Services;

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System.ComponentModel.DataAnnotations;

/// 
/// TLog 日志服务:首次使用 自动创建 数据库和数据表。

/// 使用示例,第1步:Program.cs 中,注册服务,builder.Services.AddTLog();
/// 使用示例,第2步:TLog.Page(UserName, DisplayName, NavigationManager.ToBaseRelativePath(NavigationManager.Uri)); ///
public static class TLog { private static DbContextOptions? contextOptions; /// /// 注册 TLog 服务,示例:builder.Services.AddTLog(); /// /// /// /// /// public static IServiceCollection AddTLog(this IServiceCollection services, TLogDbType dbType = TLogDbType.Sqlite, string connectionString = "Data Source=SQLiteFileTLog.db") { switch (dbType) { case TLogDbType.SqlServer: //注册 日志上下文 services.AddDbContext(options => options.UseSqlServer(connectionString)); //记录 DbContextOptions 其他方法使用 contextOptions = new DbContextOptionsBuilder().UseSqlServer(connectionString).Options; break; default: services.AddDbContext(options => options.UseSqlite(connectionString)); contextOptions = new DbContextOptionsBuilder().UseSqlite(connectionString).Options; break; } // 自动创建数据库和数据表:修改实体定义后,删除原有的数据库自动重新建立;或者根据实体定义手动修改数据库和数据表。 using var tLogDbContext = new TLogDbContext(contextOptions); if (tLogDbContext.Database.EnsureCreated()) { TLog.Info("初始化数据库:成功!"); TLog.Console("初始化数据库:成功!"); } return services; } /// /// 等价:System.Console.WriteLine($"TLog————{输出信息}") /// /// public static void Console(string? 输出信息) { System.Console.WriteLine($"TLog————{输出信息}"); } /// /// 操作类型 = TLogOpStyle.其他信息 /// /// /// /// /// public static void Info(string 用户名, string 姓名, string 操作对象 = "", string 操作说明 = "") { using var tLogDbContext = new TLogDbContext(contextOptions!); tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.其他信息, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明 }); tLogDbContext.SaveChanges(); tLogDbContext.Dispose(); } /// /// 操作类型 = TLogOpStyle.其他信息 /// /// public static void Info(string 操作说明) { using var tLogDbContext = new TLogDbContext(contextOptions!); tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.其他信息, 用户名 = "用户名", 姓名 = "姓名", 操作对象 = "", 操作说明 = 操作说明 }); tLogDbContext.SaveChanges(); tLogDbContext.Dispose(); } /// /// 操作类型 = TLogOpStyle.页面访问 /// /// /// /// public static void Page(string 用户名, string 姓名, string 操作对象) { using var tLogDbContext = new TLogDbContext(contextOptions!); tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.页面访问, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象 }); tLogDbContext.SaveChanges(); tLogDbContext.Dispose(); } /// /// 操作类型 = TLogOpStyle.新建 /// /// /// /// /// /// public static void Create(string 用户名, string 姓名, string 操作对象, string 操作说明 = "", bool 操作结果 = true) { using var tLogDbContext = new TLogDbContext(contextOptions!); tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.新建, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明, 操作结果 = 操作结果 }); tLogDbContext.SaveChanges(); tLogDbContext.Dispose(); } /// /// 操作类型 = TLogOpStyle.删除 /// /// /// /// /// /// public static void Delete(string 用户名, string 姓名, string 操作对象, string 操作说明 = "", bool 操作结果 = true) { using var tLogDbContext = new TLogDbContext(contextOptions!); tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.删除, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明, 操作结果 = 操作结果 }); tLogDbContext.SaveChanges(); tLogDbContext.Dispose(); } /// /// 操作类型 = TLogOpStyle.编辑 /// /// /// /// /// /// public static void Update(string 用户名, string 姓名, string 操作对象, string 操作说明 = "", bool 操作结果 = true) { using var tLogDbContext = new TLogDbContext(contextOptions!); tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.编辑, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明, 操作结果 = 操作结果 }); tLogDbContext.SaveChanges(); tLogDbContext.Dispose(); } /// /// 操作类型 = TLogOpStyle.查询 /// /// /// /// /// /// public static void Read(string 用户名, string 姓名, string 操作对象, string 操作说明 = "", bool 操作结果 = true) { using var tLogDbContext = new TLogDbContext(contextOptions!); tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.查询, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明, 操作结果 = 操作结果 }); tLogDbContext.SaveChanges(); tLogDbContext.Dispose(); } } /// /// 日志数据库上下文:建议使用独立数据库,与业务数据分开存放。 /// /// public class TLogDbContext(DbContextOptions options) : DbContext(options) { public DbSet TLogEntitys { get; set; } } /// /// 日志实体:后续可以根据需要增加,注意不要编辑、删除已有属性。 /// [Index(nameof(Id))] [Index(nameof(时间))] [Index(nameof(用户名))] [Index(nameof(姓名))] [Index(nameof(操作类型))] [Index(nameof(操作对象))] [Index(nameof(操作类型), nameof(操作对象))] public class TLogEntity { [Key] public long Id { get; set; } public DateTime 时间 { get; set; } = DateTime.Now; public required string 用户名 { get; set; } public required string 姓名 { get; set; } public TLogOpStyle 操作类型 { get; set; } = TLogOpStyle.页面访问; public required string 操作对象 { get; set; } public string 操作说明 { get; set; } = ""; public bool 操作结果 { get; set; } = true; } /// /// 日志类型:后续可以根据需要增加,注意不要编辑、删除已有类型。 /// public enum TLogOpStyle { /// /// 记录页面访问日志:Page /// 页面访问, /// /// 增删改查CRUD:Create /// 新建, /// /// 增删改查CRUD:Read /// 查询, /// /// 增删改查CRUD:Update /// 编辑, /// /// 增删改查CRUD:Delete /// 删除, /// /// Information:Info /// 其他信息 } /// /// 日志使用数据库类型:默认使用 Sqlite /// public enum TLogDbType { /// /// 使用 SQL Server database /// SqlServer, /// /// 使用 SQLite database /// Sqlite }

你可能感兴趣的:(Blazor,Web,App,EF,Core,Blazor,web,app,.net,c#,数据库)