我试图覆盖DbContext中的SaveChanges方法,但是从未调用我的覆盖代码。在代码中设置的断点永远不会命中,但是在查找引用时,VsCode指示应该调用它。
我的重写函数作为分部类在单独的文件中。
namespace Tracker.Models
{
public partial class TrackerModel : DbContext {
public override int SaveChanges() {
this.SetCreatedUpdatedTimes();
return base.SaveChanges();
}
public void SetCreatedUpdatedTimes() {
ChangeTracker.DetectChanges();
var entries = ChangeTracker
.Entries()
.Where(e => e.State == EntityState.Added || e.State == EntityState.Modified);
foreach (var entityEntry in entries) {
entityEntry.Property("UpdatedDate").CurrentValue = DateTime.Now;
if (entityEntry.State == EntityState.Added) {
entityEntry.Property("CreatedDate").CurrentValue = DateTime.Now;
}
}
}
}
这是从控制器调用的:
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Tracker.Models;
using Microsoft.AspNetCore.Http;
namespace Tracker.Controllers
{
public partial class DatastoreController : Controller {
private readonly TrackerModel _context;
public DatastoreController(TrackerModel context)
{
_context = context;
}
public ActionResult<Datastore> PostDatastore([FromBody]Datastore Datastore) {
if (!ModelState.IsValid)
return BadRequest("Invalid data.");
_context.Add(Datastore);
_context.SaveChanges();
return Datastore;
}
}
}
据我所知,一切看起来都在正确的位置。我正在使用EFCore 3.0和ASP .NET Core 3.0。
以前有人对此有麻烦并且对解决方案有任何想法吗?
我一直在以下博客中使用该实现作为指南(以及其他):https://www.ryansouthgate.com/2019/03/18/ef-core-databse-auditing/
谢谢