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:
如果您忘记提及[Key],假设您已将其设置为null,并在C#代码中明确说出> Id,则EF将尝试传递NULL,因为它的标识并将抛出异常“无法将值NULL插入列... ......“,所以可以将DatabaseGeneratedOption.Identity修改为DatabaseGeneratedOption.None - 这可能无法满足自动增量需求。所以,只需保留[Key]并让DB生成器为您填充。这就是并发性的方法。
我希望这能回答你的疑问。
下面的文章解释了EF 6和EF Core中Key属性的使用。
http://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.aspx