相关实体如下:
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