如何“覆盖” ValueGeneratedOnAdd() 生成器

时间:2021-01-24 18:14:35

标签: c# asp.net-mvc asp.net-core entity-framework-core

我已经对我的数据库进行了建模,这样我就不会更新行,而是使用增量版本创建新的行。所以我的主键在大多数情况下是一个组合,请参见下面的示例。

public class Book {
    public long Id { get; set; }

    public int Version { get; set; }
    
    public string Text { get; set; }
}

现在我会像这样在 OnModelCreating() 中设置它。

            b.Property(p => p.Id)
                .ValueGeneratedOnAdd();

            b.HasKey(p => new { p.Id, p.Version });

因此,当我更新一行时,由于我可以访问其主键 Id + 版本,我想要做的是创建一个具有相同 Id 但版本 + 1 的新实体。

换句话说,我不想实现的目标是双重的。

  • 在创建新记录时,我不想将 ID 生成为唯一值。
  • 如果我已将 Id 设置为某个值,请改用该值。

如果上述方法不可行,我将改为使用字符串作为 Id 并使用一些 GUID 来生成 Id,但之后我将不得不进行某种“尝试”插入,或在此之前检查“包含”我真的不喜欢。我希望有一个可以尽可能多地保留这种结构的解决方案。

更新 1

这是一个带有 .NET5 和 SqlServer 的 AspNetCore 应用。

0 个答案:

没有答案