使用实体框架,代码优先,无自动增量

Tec*_*her 6 c# entity-framework code-first winforms

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; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 2 个模型。它们工作得很好,除了主键上没有实现自动增量之外。

我收到 id 为空的错误,并且无法插入数据库,这对我来说似乎是逻辑的。任何想法为什么没有任何自动增量,其次我如何添加它们?我在 .NET Framework 4.6 中使用代码优先迁移,它是一个 Winforms 应用程序。

Man*_*ari 7

您必须在 ID 列上添加以下两个属性

\n\n
[Key]\n[DatabaseGenerated(DatabaseGeneratedOption.Identity)]\npublic int Id { get; set; }\n
Run Code Online (Sandbox Code Playgroud)\n\n

根据这个博客

\n\n
\n

如果您忘记提及 [Key] ,假设您已使其不为空,并在 C# 代码中显式地说 > Id ,则 EF 将尝试传递 NULL 因为\n 它是一个身份,并会抛出异常 \xe2\x80\x9c Cannot将值\n NULL 插入列\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6。\xe2\x80\x9c,因此只需修改\n DatabaseGenerateOption.Identity 为 DatabaseGenerateOption.None \xe2\x80\x93\n 可能无法满足自动增量需求。因此,只需保留 [Key]\n 并让 DB 生成器为您填充它即可。这就是涉及并发时的方法。

\n
\n\n

我希望这能回答您的疑问。

\n