gpt4 book ai didi

c# - 您可以使用 Entity Framework 6 从主键中删除 Identity 吗?

转载 作者:行者123 更新时间:2023-12-03 14:03:54 24 4
gpt4 key购买 nike

我通过 Entity Framework 代码优先创建了一个表,主键设置为自动递增,但现在我想从列中删除该自动递增。我已经尝试使用流畅的 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");
}
}
但是,当我在数据库上运行该迁移时,未从 SQL Server 2008 数据库表中删除身份规范?
我还尝试按如下方式明确关闭迁移中的身份,但这也没有做到:
AlterColumn("dbo.ProductTypes", "ProductTypeId", c => c.Int(nullable: false, identity: false));
还有另一种方法可以告诉 SQL 删除身份吗?

最佳答案

正如其他人所说,EF 不能在 native 执行此操作,尽管它会创建一个迁移脚本,使其看起来像它一样。我已经尝试了很多方法来做到这一点,我发现最简单的方法是:

  • 备份数据库...
  • 更改您的类,使其在代码中不再具有标识(通过删除属性或映射)
  • 使用包管理器控制台生成迁移 (add-migration [your migration name])
  • 将新生成的迁移
  • Up方法中的代码注释掉
  • 添加一行新代码,准备接收您将在下面生成的 SQL:Sql (@" ");
  • 进入 SSMS 并确保它设置为在您更改表时生成脚本
  • 在 SMSS
  • 中删除表设计器中的标识
  • 保存 SSMS 中的表更改并复制生成的 SQL。 (该 SQL 使用数据制作表的副本,删除原始表,然后在列上没有设置标识的情况下重新创建原始表,然后将所有数据复制回来并再次添加所有外键和约束)
  • 在上面添加的代码中的语音标记之间粘贴刚刚复制的 SQL。
  • 运行迁移

  • 这应该会给你一个删除身份的迁移,并且可以成功地在数据库的其他副本上运行。

    注意:生成的 Down 方法也不起作用,因为它将重新添加身份 which EF also can't do 。如果您需要 Down 方法来工作,请创建您添加的 SQL 的副本并调整它以再次创建具有标识的表。

    上面的方法是@Georg Patscheider 在他的回答中很好地描述的快速方法。

    关于c# - 您可以使用 Entity Framework 6 从主键中删除 Identity 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47630971/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com