实体框架未修改标识列



相关实体如下:

public class FieldBookingDateRange : ITimeStamps, ICreatedBy, ISoftDeletable
{
    [Key, DatabaseGenerated( DatabaseGeneratedOption.None )]
    public int FieldBookingDateRangeID { get; set; }
    [Required]
    public virtual FieldBooking FieldBooking { get; set; }
    public virtual DateRange DateRange { get; set; }
    ....
}

我有一个数据库列,当前设置为标识:true。

如果我在其上运行以下自动生成的迁移(这应该是将列设置为 false on identity):

public partial class RemovedDBGen_FieldBookingDateRange : DbMigration
{
    public override void Up()
    {
        DropIndex("dbo.FieldBookingDateRanges", new[] { "FieldBookingDateRangeID" });
        DropPrimaryKey("dbo.FieldBookingDateRanges");
        AlterColumn("dbo.FieldBookingDateRanges", "FieldBookingDateRangeID", c => c.Int(nullable: false, identity: false));
        AddPrimaryKey("dbo.FieldBookingDateRanges", "FieldBookingDateRangeID");
        CreateIndex("dbo.FieldBookingDateRanges", "FieldBookingDateRangeID");
    }
    public override void Down()
    {
        DropIndex("dbo.FieldBookingDateRanges", new[] { "FieldBookingDateRangeID" });
        DropPrimaryKey("dbo.FieldBookingDateRanges");
        AlterColumn("dbo.FieldBookingDateRanges", "FieldBookingDateRangeID", c => c.Int(nullable: false, identity: true));
        AddPrimaryKey("dbo.FieldBookingDateRanges", "FieldBookingDateRangeID");
        CreateIndex("dbo.FieldBookingDateRanges", "FieldBookingDateRangeID");
    }
}

它什么都不做...但不会失败。

任何想法为什么这不起作用?

SQL -详细输出

IF EXISTS (
    SELECT name FROM sys.indexes 
    WHERE 
        name = N'IX_FieldBookingDateRangeID' AND 
        object_id = object_id(N'[dbo].[FieldBookingDateRanges]', N'U')
)
DROP INDEX [IX_FieldBookingDateRangeID] ON [dbo].[FieldBookingDateRanges]
ALTER TABLE [dbo].[FieldBookingDateRanges] DROP CONSTRAINT [PK_dbo.FieldBookingDateRanges]
ALTER TABLE [dbo].[FieldBookingDateRanges] ALTER COLUMN [FieldBookingDateRangeID] [int] NOT NULL
ALTER TABLE [dbo].[FieldBookingDateRanges] ADD CONSTRAINT [PK_dbo.FieldBookingDateRanges] PRIMARY KEY ([FieldBookingDateRangeID])
CREATE INDEX [IX_FieldBookingDateRangeID] ON [dbo].[FieldBookingDateRanges]([FieldBookingDateRangeID])
我认为一旦

设置了标识属性,就无法从列中删除该属性。但是,您也许能够修改自动生成的迁移以实施解决方法。

您可以在此处找到一些示例:

  • 从表中的列中删除标识

    如果需要保留数据,但删除 IDENTITY 列,则需要:

    • 创建新列
    • 将数据从现有 IDENTITY 列传输到新列
    • 删除现有的"标识"列。
  • https://dba.stackexchange.com/questions/87420/how-to-remove-identity-specification-for-multiple-tables

最新更新