C# Enity框架覆盖标识列

C# Enity框架覆盖标识列,c#,entity-framework,C#,Entity Framework,我有一个代码第一EF类,如下所示: public class Event { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } /* snip */ } 我希望发生的是,当ID属性为null或0时,数据库将为其生成一个ID值,但是,如果我显式地将此值设置为newEvent.ID=10000000,它将使用该值作为ID列,

我有一个代码第一EF类,如下所示:

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

我希望发生的是,当ID属性为null或0时,数据库将为其生成一个ID值,但是,如果我显式地将此值设置为
newEvent.ID=10000000
,它将使用该值作为ID列,当前这样做将产生下一个可用ID。

首先,我不知道有什么好的解决方案。我建议你重新思考你想做什么,或者进一步解释你为什么需要这样做。也许有更好的解决办法。我所知道的解决你想要的东西的唯一办法是丑陋,我真的不能推荐它

  • 不能使用标识(自动递增)字段。如果你把这个 在你的专栏上,你就无能为力了。你的数据库 将抛出错误,或忽略您提供的值
  • 您必须自己处理自动增量。有很多 方法(将当前值存储在数据库中,执行 max()查询等)
  • 您可能会试图覆盖SaveChanges()。关于那件事。我也不建议你这样做

  • 也许有人会为你提供一个非常棒的解决方案。对不起,我知道这对你来说更像是一个无法回答的问题。祝你好运。

    谢谢你的意见,我也不想这样做。这背后的思想是实现PUT-HTTP方法(),其中,如果为资源(例如)发送PUT请求,则应在该地址创建资源。也许我误解了这一点,我会这样做:不要使用自动递增字段,而是创建一个UserID字段(或其他任何字段),并在该字段上设置值。然后手动为不提供该字段的对象生成ID?这是您的选择。可以手动设置,也可以将其设置为与自动递增字段相同。这是假设您甚至需要允许用户指定其ID。如中所示,改为(example.com/resource/MyUserName),在这种情况下,您只有一个自动递增字段,甚至不需要手动填充ID。hmmmm有趣的想法,我将看看我能做些什么,感谢您的输入:)