我正在研究ASP .NET WEB EF项目。尝试使用“ Update-Migration”更新数据库时收到此错误。
它说:错误号:544,状态:1,类:16 当IDENTITY_INSERT设置为OFF时,无法为表“类型”中的标识列插入显式值。
其他人以前有此问题。 我试图在此网站上应用其他人针对此问题建议的方法。在解决方案中,一种可能是解决我的问题的方法是,我在表的PK中键入了tinyInt。这很有意义,因为我已经通过[Required]数据注释对其进行了更改。
问题:如何将其改回INT类型或简单地解决此问题?
在线程底部提到了有关设置:this.Property(t => t.TableID).HasColumnName(“ TableID”)。HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
但是没有提到哪里?我使用VS2017。
这是流派类别:
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)");
}
}
}
答案 0 :(得分:1)
好吧,因为您已将ID声明为自动生成的列,所以SQL Server将不允许您专门为此列插入值。因此,您应该添加记录,如下所示:
Sql("INSERT INTO Genres (Name) VALUES ('Medicine')");
Sql("INSERT INTO Genres (Name) VALUES ('Philosophy')");
答案 1 :(得分:0)
将此添加到模型属性,以便它为您处理自动增量。
[ScaffoldColumn(false)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]