簡體   English   中英

錯誤:無法為表中的標識列插入顯式值 - INT 到 tinyInt

[英]Erro: Cannot insert explicit value for identity column in table - INT to tinyInt

我正在處理一個 ASP .NET WEB EF 項目。 嘗試使用“更新遷移”更新數據庫時出現此錯誤。

它說:當 IDENTITY_INSERT 設置為 OFF 時,錯誤編號:544,狀態:1,類別:16 無法為表“流派”中的標識列插入顯式值。

其他人之前也遇到過這個問題。 我試圖在這個網站上應用其他人在這個問題上建議的方法。 在解決方案中,一個可能可以解決我的問題是我為表的 PK 輸入了 tinyInt 類型。 這是有道理的,因為我已經通過 [Required] 數據注釋更改了它。

問題:如何將其改回 INT 類型或簡單地解決此問題?

我遵循的建議的鏈接是: EF Code First 給我錯誤當 IDENTITY_INSERT 設置為 OFF 時,無法為表“People”中的標識列插入顯式值。

在線程的底部提到了設置: this.Property(t => t.TableID).HasColumnName("TableID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

但它沒有提到哪里? 我使用 VS 2017。

這是流派類:

 public class Genre
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

    public int ID { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }
}

這是我創建的空白遷移,然后填充了 sql 代碼:

    // <auto-generated />

using System.ComponentModel.DataAnnotations.Schema;

namespace MyNotes.Migrations
{
    using System.CodeDom.Compiler;
    using System.Data.Entity.Migrations.Infrastructure;
    using System.Resources;

    [GeneratedCode("EntityFramework.Migrations", "6.2.0-61023")]
    public sealed partial class PopulateGenresTable : IMigrationMetadata
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

        private readonly ResourceManager Resources = new ResourceManager(typeof(PopulateGenresTable));

    string IMigrationMetadata.Id
    {
        get { return "201809211642586_PopulateGenresTable"; }
    }

    string IMigrationMetadata.Source
    {
        get { return null; }
    }

    string IMigrationMetadata.Target
    {
        get { return Resources.GetString("Target"); }
    }
    }
}

在創建對此文件的更改后嘗試運行 Update-Database 時出現錯誤:

namespace MyNotes.Migrations
{
    using System.Data.Entity.Migrations;

    public partial class PopulateGenresTable : DbMigration
    {
        public override void Up()
        {
            Sql("INSERT INTO Genres (ID, Name) VALUES (1,'Medicine')");
            Sql("INSERT INTO Genres (ID, Name) VALUES (2,'Philosophy')");

        }

        public override void Down()
        {
            Sql("DELETE FROM Genres WHERE ID IN(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31)");
        }
    }
}

好吧,因為您將 ID 聲明為自動生成的列,SQL Server 將不允許您專門為此列插入值。 所以你應該按如下方式添加記錄:

Sql("INSERT INTO Genres (Name) VALUES ('Medicine')");
Sql("INSERT INTO Genres (Name) VALUES ('Philosophy')");

將此添加到您的模型屬性,以便它為您處理自動遞增。

[ScaffoldColumn(false)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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