创建没有自动递增 ID 的 Entity Framework Table
Creating Entity Framework Table That Does Not Have Auto Increment Id
使用 Entity Framework SQL-Server-CE 我创建了一个 table 这样的:
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; }
}
每当我尝试使用 Entity Framework 插入其中时,Era
对象的 Id
字段将被忽略,并插入一个自动递增的 Id
。
如何使 Id
字段不使用自动增量值,而是使用给定值,最好使用注释。
我认为你需要:
[DatabaseGenerated(DatabaseGeneratedOption.None)]
默认是数据库生成一个值,所以你需要明确地关闭它。
[DatabaseGenerated(DatabaseGeneratedOption.None)]
这可确保 EF 不会尝试更改值,而只会将它们与其余数据一起插入。
这里有详细的描述link
这就是我要找的答案:
如果你想在 entity framework 中使用非自动递增 ID 的 table;您需要先备份数据,删除table(这可以通过在您的DbContext
class中注释相关的DbSet
来完成),添加注释[DatabaseGenerated(DatabaseGeneratedOption.None)]
然后迁移和更新数据库。
使用 Entity Framework SQL-Server-CE 我创建了一个 table 这样的:
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; }
}
每当我尝试使用 Entity Framework 插入其中时,Era
对象的 Id
字段将被忽略,并插入一个自动递增的 Id
。
如何使 Id
字段不使用自动增量值,而是使用给定值,最好使用注释。
我认为你需要:
[DatabaseGenerated(DatabaseGeneratedOption.None)]
默认是数据库生成一个值,所以你需要明确地关闭它。
[DatabaseGenerated(DatabaseGeneratedOption.None)]
这可确保 EF 不会尝试更改值,而只会将它们与其余数据一起插入。
这里有详细的描述link
这就是我要找的答案:
如果你想在 entity framework 中使用非自动递增 ID 的 table;您需要先备份数据,删除table(这可以通过在您的DbContext
class中注释相关的DbSet
来完成),添加注释[DatabaseGenerated(DatabaseGeneratedOption.None)]
然后迁移和更新数据库。