【问题标题】:Identity Column not being modified by Entity framework实体框架未修改身份列
【发布时间】:2015-04-29 07:42:38
【问题描述】:

相关Entity如下:

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):

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])

【问题讨论】:

  • 你能展示一个生成的 SQL 脚本吗?
  • 我已经为你完成了...我自己也去检查一下。
  • 看来我必须完全删除表格才能修改它:S?
  • 这可能是 SQL Server 的限制。我记得我前一段时间必须这样做,但找不到任何文档。
  • 这里有问题的一些解释:stackoverflow.com/a/18917348/150342

标签: c# entity-framework


【解决方案1】:

我认为一旦设置了列,就无法从列中删除它。但是,您也许可以修改自动生成的迁移以实施解决方法。

你可以在这里找到一些例子:

【讨论】:

    猜你喜欢
    • 2013-12-26
    • 2022-01-18
    • 2010-10-23
    • 1970-01-01
    • 2012-08-18
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多