我正在开发我首先使用 EF 代码(v4.4)作为 ORM 和 SqlServer 作为数据库的应用程序。我还需要一个选项来从另一个具有相似数据结构的数据库类型中导入数据。在数据传输期间,我需要使用它们所具有的值传输标识列,以免破坏相关数据。
假设这是操作序列:
- 获取数据
- 将其转换为适合 EF 模型
- 将每个实体添加到 DbContext
- 保存更改
问题是它不会像原来那样插入标识值,因为我的主键被设置为标识列。
解决这个问题的方法之一是使用 IDENTITY_INSERT 命令,但它需要在同一个连接周期下与插入查询一起执行。连接周期是指在所有操作(IDENTITY_INSERT 和 INSERT INTO)期间不得关闭连接。
问题:ExecuteSqlCommand 会关闭连接,即使在调用它之前已显式打开它。
解决此问题的方法是不使用 EF 执行此任务,而是使用 ADO.NET SqlCommand。这样我们就可以更好地控制连接何时打开/关闭。
问题:如果我改变我的模型,我也需要改变导入查询,所以我需要在两个地方维护数据库结构。
任何建议如何使用 EF 实现这一目标?我不知道为什么 EF 团队决定在调用 ExecuteSqlCommand 后总是关闭连接。