微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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 应用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。