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