帧日志上下文保存更改,但不记录更改

本文关键字:记录 日志 上下文 保存更改 | 更新日期: 2023-09-27 18:31:13

我一直在尝试实现Martin Eden的FrameLog。它看起来与我自己考虑编码的一些要求完美匹配,但意识到可扩展性将是有限的,并且需要很长时间。

因此,我在 DbContext 中实现了 Save context 方法,使用一个名为 Save(string username) 的新方法来调用Logger.SaveChanges(username, SaveOptions.AcceptAllChangesAfterSave);

虽然这会将我的对象保存到数据库中,但我没有得到任何更改日志。有没有人在这方面有任何经验可以伸出援手?

这是我的课程:OppsContext.cs

    public OppsContext()
        : base("Name=OppsContext")
    {
        Logger = new FrameLogModule<ChangeSet, string>(new ChangeSetFactory(), FrameLogContext);
    }
    #region logging
    public DbSet<ChangeSet> ChangeSets { get; set; }
    public DbSet<ObjectChange> ObjectChanges { get; set; }
    public DbSet<PropertyChange> PropertyChanges { get; set; }
    public readonly FrameLogModule<ChangeSet, string> Logger;
    public IFrameLogContext<ChangeSet, string> FrameLogContext
    {
        get { return new OppsContextAdapter(this); }
    }
    public HistoryExplorer<ChangeSet, string> HistoryExplorer
    {
        get { return new HistoryExplorer<ChangeSet, string>(FrameLogContext); }
    }
    public void Save(string author)
    {
        try
        {
            Logger.SaveChanges(author, SaveOptions.AcceptAllChangesAfterSave);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }

OppsContextAdapter.cs

        public class OppsContextAdapter : DbContextAdapter<ChangeSet, string>
{
    private OppsContext context;
    public OppsContextAdapter(OppsContext context)
        : base(context)
    {
        this.context = context;
    }
    public override IQueryable<IChangeSet<string>> ChangeSets
    {
        get { return context.ChangeSets; }
    }
    public override IQueryable<IObjectChange<string>> ObjectChanges
    {
        get { return context.ObjectChanges; }
    }
    public override IQueryable<IPropertyChange<string>> PropertyChanges
    {
        get { return context.PropertyChanges; }
    }
    public override void AddChangeSet(ChangeSet changeSet)
    {
        context.ChangeSets.Add(changeSet);
    }
    public override Type UnderlyingContextType
    {
        get { return typeof(OppsContext); }
    }
}

帧日志上下文保存更改,但不记录更改

我的错,发现这是我自己的错。对于任何遇到类似问题的人;

在对对象应用新值之前,请检查是否从数据库加载对象。此上下文是需要加载原始值的上下文,而不是从中创建的帖子数据或新对象(应该是实体)。