C# 正在创建没有自动增量Id的实体框架表

C# 正在创建没有自动增量Id的实体框架表,c#,sql,entity-framework,sql-server-ce,C#,Sql,Entity Framework,Sql Server Ce,我使用实体框架SQL Server CE创建了如下表: class Era { public long Id { get; set; } [Index(IsUnique=true), Required] public long Code { get; set; } public string Name { get; set; } public long StartDate { get; set; } public long EndDate { ge

我使用实体框架SQL Server CE创建了如下表:

class Era {
    public long Id { get; set; }
    [Index(IsUnique=true), Required]
    public long Code { get; set; }
    public string Name { get; set; }
    public long StartDate { get; set; }
    public long EndDate { get; set; }
}
每当我尝试使用实体框架插入时,
Era
对象的
Id
字段将被忽略,并插入一个自动递增的
Id

如何使
Id
字段不使用自动递增值,而是使用给定值,最好使用注释。

我认为您需要:

[DatabaseGenerated(DatabaseGeneratedOption.None)]
默认情况下,数据库会生成一个值,因此需要显式关闭该值

[DatabaseGenerated(DatabaseGeneratedOption.None)] 
这样可以确保EF不会尝试更改值,只需将其与其余数据一起插入即可


下面是关于它的详细描述,这就是我一直在寻找的答案:


如果您想在实体框架中有一个非自动递增id的表;您需要首先备份数据,删除表(这可以通过在
DbContext
类中注释相关的
DbSet
来完成),添加注释
[DatabaseGenerated(DatabaseGeneratedOption.None)]
然后迁移和更新数据库。

添加该注释并尝试在此异常中插入结果:System.Data.SqlServerCe.SqlCeException:无法修改该列。[Column name=Id]@raven如我所述,在添加注释后,您必须重新创建database@sm.abdullah我现在正在尝试,但在那个示例中,需要一个sql连接字符串,但是我使用的是sql compact,我不知道在那里使用什么。@ErikEJ是的,我使用包管理器控制台更新了数据库您的根本问题是该列在应为
DatabaseGeneratedOption时为IDENTITY。无
。您已经找到了一个有趣的解决方法,但实际上您应该更改该列。如果您已经创建了表,那么除了添加数据注释之外,您还需要做更多的事情,这是正确的……链接是关于打开标识插入的。如果创建的主键不是数据库生成的,则不需要这样做。