ef-code-first - 如何暂时关闭 EF Code First 中的 IDENTITY 列?

标签 ef-code-first

我正在 EF Code First 中创建现有应用程序的重写,但我需要从现有应用程序的数据库中导入一些数据。这是我的实体类的定义:

public class Business : EntityBase
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int AccountNumber { get; set; }

现在,导入的记录需要保留其 AccountNumber旧系统的值(value)。但是,新值应该使用 IDENTITY DB 生成的值。

如何关闭 IDENTITY当我导入旧记录时,然后在应用程序的剩余生命周期内重新打开它?在导入记录之前执行此操作无效:
context.Database.ExecuteSqlCommand("set identity_insert Businesses on");

最佳答案

你不能。执行 set identity_insert命令会更改 SQL Server 的行为,但不会更改 Entity Framework 的行为。

您有三种导入记录的选择:

  • 使用原始 ADO.NET 命令(不是实体)或 ExecuteSqlCommand .
  • 使用不同的 DbContext ,其中您将 key 定义为非生成。
  • 使用更适合数据转换的不同技术,例如 SSIS
  • 关于ef-code-first - 如何暂时关闭 EF Code First 中的 IDENTITY 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151710/

    相关文章:

    c# - 一个实体可以与多个实体相关联吗?

    azure - SQL Azure 意外数据库删除/重新创建

    c# - 是什么原因导致 INSERT 语句与 FOREIGN KEY 约束冲突?

    asp.net-mvc - 延迟加载和 RequiredAttribute 问题 : The XXX field is required

    sql - Entity Framework 代码第一类,其父类和子类的类型与其自己的类相同

    entity-framework - 重命名 Entity Framework 为代码优先开发生成的类

    entity-framework - 为什么我会得到一个带有 Entity Framework 代码优先外键属性的额外外键列?

    entity-framework - Code First - 在一对多关系中将级联规则设置为 "Set Null"

    c# - 在 MVC3 中处理创建和更新复杂数据类型的最佳方法是什么?

    c# - Fluent Api - M :M relationship with two 1:M properties. 怎么样?