使用 Entity Framework 代码优先无自动增量
Using Entity Framework with code-first no autoincrement
public class Movie
{
public int Id { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
public virtual IList<Genre> Genre { get; set; }
public virtual IList<Cast> cast { get; set; }
[Display(Name = "Release Date")]
public DateTime ReleaseDate { get; set; }
}
public class Genre
{
public int Id { get; set; }
[Required]
[StringLength(255)]
public String Name { get; set; }
}
这是我的两个模型。它们工作得很好,除了自动增量没有在主键上实现。
我收到 id 为 null 的错误,无法插入到数据库中,这对我来说似乎是合乎逻辑的。为什么没有任何自动增量的任何想法,其次我如何添加它们?我在 .NET Framework 4.6 中使用代码优先迁移,它是一个 Winforms 应用程序。
您必须在 ID 列下方添加两个属性
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
根据这个blog:
If you forget to mention [Key] , assuming you have made it not null, and explicitly say > Id in C# code, EF will try to pass NULL since
its an identity and will throw an exception “Cannot insert the value
NULL into column……….“, so can just modify
DatabaseGeneratedOption.Identity to DatabaseGeneratedOption.None –
which might not fulfill the auto-increment need. So, just keep [Key]
and let DB generator to fill it for you. This is the approach when it
comes to concurrency.
希望这能回答您的问题。
以下文章介绍了 EF 6 和 EF Core 中 Key 属性的使用。
http://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.aspx
当我首先使用代码生成 table 时,table 上的主键定义是数据类型
double
所以当生成 table 时,主键上不存在标识。
所以我做的是反向迁移,并将数据类型更改为
integer
在这种情况下,生成了 table 上的自动增量或标识。
public class Movie
{
public int Id { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
public virtual IList<Genre> Genre { get; set; }
public virtual IList<Cast> cast { get; set; }
[Display(Name = "Release Date")]
public DateTime ReleaseDate { get; set; }
}
public class Genre
{
public int Id { get; set; }
[Required]
[StringLength(255)]
public String Name { get; set; }
}
这是我的两个模型。它们工作得很好,除了自动增量没有在主键上实现。
我收到 id 为 null 的错误,无法插入到数据库中,这对我来说似乎是合乎逻辑的。为什么没有任何自动增量的任何想法,其次我如何添加它们?我在 .NET Framework 4.6 中使用代码优先迁移,它是一个 Winforms 应用程序。
您必须在 ID 列下方添加两个属性
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
根据这个blog:
If you forget to mention [Key] , assuming you have made it not null, and explicitly say > Id in C# code, EF will try to pass NULL since its an identity and will throw an exception “Cannot insert the value NULL into column……….“, so can just modify DatabaseGeneratedOption.Identity to DatabaseGeneratedOption.None – which might not fulfill the auto-increment need. So, just keep [Key] and let DB generator to fill it for you. This is the approach when it comes to concurrency.
希望这能回答您的问题。
以下文章介绍了 EF 6 和 EF Core 中 Key 属性的使用。
http://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.aspx
当我首先使用代码生成 table 时,table 上的主键定义是数据类型
double
所以当生成 table 时,主键上不存在标识。
所以我做的是反向迁移,并将数据类型更改为
integer
在这种情况下,生成了 table 上的自动增量或标识。