实体框架覆盖标识列

本文关键字:覆盖标识 框架 实体 | 更新日期: 2023-09-27 18:03:12

我有一个Code First EF类,像这样:

public class Event
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
    /* snip */
}

我想要发生的是当ID属性为null或0时数据库将为它生成一个ID值,但是如果我显式地设置这个值,那么newEvent.ID=10000000,它将使用它作为ID列,当前这样做将导致下一个可用的ID

实体框架覆盖标识列

首先,我不知道有什么好的解决方案。我建议您重新考虑您正在尝试做的事情,或者进一步解释为什么需要这样做。也许有更好的解决办法。对于你想要的,我所知道的唯一解决方案是丑陋的,我真的不推荐它。

  1. 不能使用标识(自动递增)字段。如果你把这个在你的专栏上,那你就无能为力了。你的数据库会抛出一个错误,或者忽略你给它的值。
  2. 你必须自己处理自动增量。有很多实现此目的的方法(将当前值存储在数据库中,执行max()查询等)。
  3. 你可能会想要重写SaveChanges()。这是一个SOPOST一下。我也不建议你这么做。

也许有人会为你提供一个非常棒的解决方案。抱歉,我知道这对你来说更像是没有答案。好运。