使用 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 上的自动增量或标识。