Я пытаюсь переопределить метод SaveChanges в DbContext, но мой код переопределения никогда не вызывается. Точки останова, установленные в коде, никогда не достигаются, но 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/
Спасибо