错误:无法为表中的身份列插入显式值-INT为tinyInt

时间:2018-09-21 14:52:11

标签: c# database

我正在研究ASP .NET WEB EF项目。尝试使用“ Update-Migration”更新数据库时收到此错误。

它说:错误号:544,状态:1,类:16 当IDENTITY_INSERT设置为OFF时,无法为表“类型”中的标识列插入显式值。

其他人以前有此问题。 我试图在此网站上应用其他人针对此问题建议的方法。在解决方案中,一种可能是解决我的问题的方法是,我在表的PK中键入了tinyInt。这很有意义,因为我已经通过[Required]数据注释对其进行了更改。

问题:如何将其改回INT类型或简单地解决此问题?

链接到我遵循的建议是: EF Code First giving me error Cannot insert explicit value for identity column in table 'People' when IDENTITY_INSERT is set to OFF.

在线程底部提到了有关设置: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)");
        }
    }
}

2 个答案:

答案 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)]