在项目中经常遇到一些数据的修改,很多时候业务方需要一个修改日志记录,这里我们计划用mssql数据库来存放日志记录,用EF来操作,记录日志可以用mvc的ActionFilterAttribute 来完成也可以用AOP来完成。以前在asp.net的AOP用的是IMessageSink这里我们计划用Castle.DynamicProxy来完成。
准备工作:
创建数据库表:
CREATE TABLE [dbo].[logs](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](50) NULL,
[Content] [nvarchar](max) NULL,
[CreateTime] [datetime] NULL,
CONSTRAINT [PK_logs] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
这里的Title是根据业务划分的,Content是修改后的内容,实际生产应该还要加上修改人。这里都简化了(个人并不推荐用EF来迁移数据)
创建 Asp.netCore项目
这里我们以asp.netcore2.2创建一个WebAppLog视图模型程序
在appsettings.json添加数据库连接串:
"ConnectionStrings": {
"SqlServerConnection": "Server=192.168.100.5;initial catalog=test;UID=sa;PWD=xxxx"
}
在Models文件夹下新建Log.cs
namespace WebAppLog.Models
{
public class Log
{
public int Id { set; get; }
public string Title { set; get; }
public string Content { set; get; }
public DateTime CreateTime { set; get; }
}
}
创建LogContext.cs文件:
namespace WebAppLog
{
using Microsoft.EntityFrameworkCore;
using WebAppLog.Models;
public class LogContext : DbContext
{
public LogContext(DbContextOptions<LogContext> options) : base(options)
{
}
public virtual DbSet<Log> Log { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Log>().ToTable("logs");
}
}
}
修改HomeController.cs文件:
namespace WebAppLog.Controllers
{
using Microsoft.AspNetCore.Mvc;
using System.Linq;
public class HomeController : Controller
{
private LogContext context;
public HomeController(LogContext context)
{
this.context = context;
}
public IActionResult Index()
{
var data = context.Log.ToList();
return View(data);
}
}
}
修改Home的Index.cshtml视图:
@{
var list = Model as List<Log>;