Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架未修改标识列_C#_Entity Framework - Fatal编程技术网

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属性,就无法将其删除。但是,您可以修改自动生成的迁移以实现变通方法

您可以在这里找到一些示例:

  • 如果需要保留数据但删除标识列,则需要:

    • 创建一个新列
    • 将数据从现有标识列传输到新列
    • 删除现有标识列

能否显示生成的SQL脚本?我已经为您完成了。。。我自己也要检查一下。似乎我必须完全删除表才能修改它:S?这可能是SQL Server的一个限制。我记得不久前我不得不这么做,但找不到任何相关的文档。这里有一些关于为什么会出现问题的解释:
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])