默认情况下,Entity
framework假定数据库生成了整数主键(等同于添加属性
HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)或
Property(e=>e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);在Fluent
API中调用。
如果查看创建表的迁移,应该会看到以下内容:
CreateTable( "dbo.Events", c => new { EventID = c.Int(nullable: false, identity: true), //etc }) .PrimaryKey(t => t.EventID );然后,您使用Fluent API将模型更改为
DatabaseGenerated.None。EF将其纳入迁移过程:
AlterColumn("dbo.Events", "EventID", c => c.Int(nullable: false, identity: false))和生成的SQL是这样的:
ALTER TABLE [dbo].[Events] ALTER COLUMN [EventID] [int] NOT NULL
实际上确实确实蹲下了。从列中删除IDENTITY并非易事。您需要删除并重新创建表或创建新列,然后必须复制数据并修复外键。因此,EF并未为您做到这一点也就不足为奇了。
您需要确定如何最好地自己做。现在,您可以将迁移回滚到0并从头开始重新设置支架
DatabaseGeneratedOption.None,或者可以手动更改迁移以删除并重新创建表。
或者,您可以删除并重新创建列:
DropColumn("Customer", "CustomerId"); AddColumn("Customer", "CustomerId", c => c.Long(nullable: false, identity: false));编辑, 或者您可以使用自定义迁移操作打开/关闭身份



