0

每当继承自的实体HistoricalData发生更改时,我都想做插入而不是更新。

这是带有 Key 的抽象基类{VersionID, ParentID}

public abstract class HistoricalData
{
    public int VersionID { get; set; }
    public Guid ParentID { get; set; }
    public DateTime ValidFrom { get; set; }
}

这是我的方法DbContext

public override Task<int> SaveChangesAsync()
{
    foreach (var entry in ChangeTracker.Entries<HistoricalData>().Where(e => e.State == EntityState.Modified))
    {
        InsertInsteadOfUpdate(entry);
    }
    return base.SaveChangesAsync();
}

private void InsertInsteadOfUpdate(DbEntityEntry<HistoricalData> entry)
{
    // ValidFrom is not set manually -> Set it automatically to now
    if (entry.OriginalValues["ValidFrom"].Equals(entry.CurrentValues["ValidFrom"]))
    {
        entry.Entity.ValidFrom = DateTime.Now;
    }
    // Insert instead of Update
    entry.CurrentValues["VersionID"] = null;
    entry.State = EntityState.Added;
}

我更改了VersionID,因为它是一个标识列,我希望数据库为插入创建一个新值。

但是,我得到以下异常:

System.InvalidOperationException:属性“VersionID”是对象的关键信息的一部分,无法修改。

如果我不尝试修改VersionID,则插入失败并出现 DuplicateKey 异常。

有什么方法可以将 DbEntityEntry 从已修改更改为使用新 ID 添加?

4

0 回答 0