簡體   English   中英

使用代碼優先的實體框架沒有自動增量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM