C# 实体框架未修改标识列
相关实体如下:C# 实体框架未修改标识列,c#,entity-framework,C#,Entity Framework,相关实体如下: public class FieldBookingDateRange : ITimeStamps, ICreatedBy, ISoftDeletable { [Key, DatabaseGenerated( DatabaseGeneratedOption.None )] public int FieldBookingDateRangeID { get; set; } [Required] public virtual FieldBooking F
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; }
....
}
我有一个数据库列当前设置为Identity:true
如果我在其上运行以下自动生成的迁移(这应该是将列的标识设置为false):
它没有任何作用。。。但并没有失败
你知道为什么这样不行吗
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属性,就无法将其删除。但是,您可以修改自动生成的迁移以实现变通方法 您可以在这里找到一些示例:
-
如果需要保留数据但删除标识列,则需要:
- 创建一个新列
- 将数据从现有标识列传输到新列
- 删除现有标识列李>
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])