[英]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 為空的錯誤,並且無法插入數據庫,這對我來說似乎是邏輯。 任何想法為什么沒有任何自動增量,其次我如何添加它們? 我在 .NET Framework 4.6 中使用代碼優先遷移,它是一個 Winforms 應用程序。
您必須在 ID 列上放置以下兩個屬性
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
根據此博客:
如果您忘記提及 [Key] ,假設您已將其設置為非空,並在 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
當我首先使用代碼生成表時,表上主鍵的定義是數據類型
雙倍的
因此,當生成表時,主鍵上不存在標識。
所以我所做的是反向遷移,並將數據類型更改為
整數
在這種情況下,生成了表上的自動增量或標識。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.