实体框架覆盖标识列

时间:2013-03-09 19:48:13

标签: c# entity-framework

我有一个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 个答案:

答案 0 :(得分:1)

首先,我不知道有一个很好的解决方案。我建议您重新考虑您要做的事情,或者进一步解释为什么需要这样做。可能有更好的解决方案。我知道你想要的唯一解决方案是丑陋的,我不能真正推荐它。

  1. 您无法使用身份(自动增量)字段。如果你把它 在你的专栏上,你无能为力。你的数据库 将抛出错误,或忽略您提供的值。
  2. 您必须自己处理自动增量。有许多 方法这样做(将当前值存储在数据库中,执行 max()查询等)。
  3. 您可能会想要覆盖SaveChanges()。关于那个Here is an SO POST。我真的不建议你这样做。
  4. 也许有人会为您提供一个非常棒的解决方案。对不起,我知道这对你来说不是一个非答案。祝你好运。