使用实体框架与代码优先没有自动增量

问题描述 投票:2回答:2
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应用程序。

c# winforms entity-framework code-first
2个回答
2
投票

您必须在ID列上放置两个属性

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

根据这个blog

如果您忘记提及[Key],假设您已将其设置为null,并在C#代码中明确说出> Id,则EF将尝试传递NULL,因为它的标识并将抛出异常“无法将值NULL插入列... ......“,所以可以将DatabaseGeneratedOption.Identity修改为DatabaseGeneratedOption.None - 这可能无法满足自动增量需求。所以,只需保留[Key]并让DB生成器为您填充。这就是并发性的方法。

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


1
投票
© www.soinside.com 2019 - 2024. All rights reserved.