【问题标题】:Error solution for identity insert is set off标识插入的错误解决方案被触发
【发布时间】:2017-11-06 20:16:29
【问题描述】:

我首先使用的是 EF 代码 DomesticTask 类看起来像

 public class DomesticTask
    {
        public int Id { get; set; }

        [Required]
        public ApplicationUser DomesticClient { get; set; }
        public DateTime DateTime { get; set; }

        [Required]
        [StringLength(500)]
        public string Description { get; set; }

        [Required]
        public Category Category { get; set; }
    }

类别类如下

{
    public int Id { get; set; }

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

数据库上下文如下

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<DomesticTask> DomesticTasks { get; set; }
    public DbSet<Category> Categories { get; set; }

我的迁移类看起来像这样

public partial class PopulateCategoriesTable : DbMigration
{
    public override void Up()
    {
        Sql("INSERT INTO Categories (Id, Name) VALUES (1, 'Plumber')");
        Sql("INSERT INTO Categories (Id, Name) VALUES (2, 'Mason')");
        Sql("INSERT INTO Categories (Id, Name) VALUES (3, 'Labour')");
        Sql("INSERT INTO Categories (Id, Name) VALUES (4, 'Milk-man')");
        Sql("INSERT INTO Categories (Id, Name) VALUES (5, 'Electrician')");
    }

    public override void Down()
    {
        Sql("DELETE FROM Categories WHERE Id IN (1, 2, 3, 4, 5)");
    }
}

当我更新数据库时,它显示以下错误。

错误号:544,状态:1,类:16 无法插入显式值 当 IDENTITY_INSERT 设置为时,表 'Categories' 中的标识列 关闭。

我该如何解决这个错误?

【问题讨论】:

标签: asp.net .net entity-framework


【解决方案1】:

您正在为作为标识列的类别 Id 插入值,应该由 sql server 插入。

【讨论】:

    【解决方案2】:

    您应该更新您的迁移脚本以允许您在插入时设置identity 列值。我当然假设您使用 SQL Server 作为数据存储,因为以下代码使用的是 T-SQL 而不是 ANSI-92 SQL。

    public partial class Seed_Categories : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.Sql(@"
                SET IDENTITY_INSERT [dbo].[Categories] ON;
    
                INSERT INTO [dbo].[Categories] ([ID], [NAME], [CODE])
                    VALUES
                        (1, 'Science Fiction',      'SCIFI'),
                        (2, 'Historical Fiction',   'HISFI'),
                        (3, 'Historical',           'HISTO'),
                        (4, 'English Literature',   'ENGLT'),
                        (5, 'Spanish Literature',   'SPALT');
    
                SET IDENTITY_INSERT [dbo].[Categories] OFF;
                ");
        }
    
        protected override void Down(MigrationBuilder migrationBuilder)
        {
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 2010-11-29
      • 2023-03-25
      • 2012-03-25
      • 1970-01-01
      • 2021-07-25
      相关资源
      最近更新 更多