我通过实体框架代码创建了一个表--首先将主键设置为自动增量,但现在我想从列中删除该自动增量。我试过用这两种fluent API来实现这一点:
public class ProductTypeMap: EntityTypeConfiguration<ProductType>
{
public ProductTypeMap()
{
// This is an enum effectively, so we need fixed IDs
Property(x => x.ProductTypeId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
}还有一个注释:
public class ProductType
{
[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ProductTypeId { get; set; }
public string ProductTypeName { get; set; }
}在这两种情况下,它们生成相同的迁移代码:
public partial class removeproducttypeidentity : DbMigration
{
public override void Up()
{
DropPrimaryKey("dbo.ProductTypes");
AlterColumn("dbo.ProductTypes", "ProductTypeId", c => c.Int(nullable: false));
AddPrimaryKey("dbo.ProductTypes", "ProductTypeId");
}
public override void Down()
{
DropPrimaryKey("dbo.ProductTypes");
AlterColumn("dbo.ProductTypes", "ProductTypeId", c => c.Int(nullable: false, identity: true));
AddPrimaryKey("dbo.ProductTypes", "ProductTypeId");
}
}但是,当我在数据库上运行迁移时,身份规范不会从Server 2008数据库表中删除吗?
我还试图显式地关闭迁移中的标识,如下所示,但也没有做到这一点:
AlterColumn("dbo.ProductTypes", "ProductTypeId", c => c.Int(nullable: false, identity: false));还有其他方法可以告诉SQL删除标识吗?
发布于 2017-12-04 10:50:12
不能使用ALTER COLUMN设置列是否是标识列(如何将列更改为标识(1,1))。
相反,你必须:
CREATE TMP_table,但ID列设置为identity: falseSET IDENTITY_INSERT [TMP_Table] ONSET IDENTITY_INSERT [TMP_Table] OFFDROP原始表EXECUTE sp_rename)提示:更改Studio中的列并检查发出的脚本(SQL SERVER -在列上添加或删除标识属性)。
发布于 2018-05-08 18:15:49
就像其他人说的那样,EF无法在本地完成这一任务,尽管它将创建一个迁移脚本,使其看起来像是迁移脚本。我尝试过很多方法,我发现最简单的方法是:
add-migration [your migration name] )生成迁移Up方法中的代码Sql (@" ");这将为您提供一个移除标识的迁移,并且可以成功地在数据库的其他副本上运行。
注意:生成的Down方法也不能工作,因为它将重新添加标识,EF也做不到。如果需要使用Down方法,请创建所添加的SQL的副本,并对其进行调整以再次创建带有标识的表。
上面的方法是@在他的回答中描述得那么好的一种快速方式。
发布于 2021-11-18 19:25:39
如果你想要删除身份,你需要
步骤1.键列的注释
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public short Id { get; set; }这将生成迁移脚本。
AlterColumn("dbo.TableName", "Id", c => c.Long(nullable: false));但是这个脚本不会从键列中删除标识。
步骤2.从中的键列手动删除标识。你不需要备份数据库。

如果遇到错误,可能需要转到“Tools”->“选项”“->”Designers,并取消选中“防止需要重新创建表的保存更改”。

https://stackoverflow.com/questions/47630971
复制相似问题