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