覆盖ASP .NET / EFCore 3.0中未调用的SaveChanges()

时间:2019-10-10 19:38:24

标签: c# ef-core-3.0

我试图覆盖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/

谢谢

0 个答案:

没有答案