C# 正在创建没有自动增量Id的实体框架表
我使用实体框架SQL Server CE创建了如下表: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
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。无。您已经找到了一个有趣的解决方法,但实际上您应该更改该列。如果您已经创建了表,那么除了添加数据注释之外,您还需要做更多的事情,这是正确的……链接是关于打开标识插入的。如果创建的主键不是数据库生成的,则不需要这样做。