c# - 错误 : Cannot insert explicit value for identity column in table - INT to tinyInt

标签 c# database

我正在处理一个 ASP .NET WEB EF 项目。我在尝试使用“更新迁移”更新数据库时遇到此错误。

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

其他人以前也遇到过这个问题。 我尝试在这个网站上应用其他人在这个问题上建议的方法。在这些解决方案中,一个可能是解决我的问题的方法是我为表的 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);

但是哪里没有提到呢?我使用 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')");

关于c# - 错误 : Cannot insert explicit value for identity column in table - INT to tinyInt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52446301/

相关文章:

c# - 模态消息框线程问题

c# - 我应该如何保存 HttpPostedFile

c# - 智能感知不再有效

database - 将关系数据库中的用户表与人员表分开

java - 具有 Xml 字符串的 MySql 数据库表。如何将该数据导入到另一个 mysql 表中

c# - 如何使用 Microsoft uiautomation 检查复选框?

c# - 有没有办法自动将 View 模型对象映射到 javascript 对象?

javascript - Node.js 数据结构是否易变/何时使用数据库而不是数据结构?

mysql - 将 session 中一位用户的消息标记为已删除

mysql 到 mongodb 数据迁移计划高级