【问题标题】:How to correctly copy a table and keep its original key values如何正确复制表并保留其原始键值
【发布时间】:2013-10-28 23:56:28
【问题描述】:

我需要将“订单”表发布到网站,但由于超出此范围的原因,网络应用无法直接访问公司的数据库。解决方案是创建相同的“订单” " 另一个数据库中的表(在远程 IIS 服务器上)并将原始订单(行)导出到它。为此,我使用的是 EF 5 和 AutomaticMigrationsEnabled = true

原始“Orders”表有一个名为“OrderNo”的键列,其中“IsIdentity = Yes”。我希望网络“订单”表也将其“订单编号”作为键列,以便我可以使用“查找”方法来定位和更新行,但问题是:

我不能将“OrderNo”设置为一个身份,因为它必须保留原始的“OrderNo”值,但是在运行“PM> update-database”之后,“Orders”表是使用“OrderNo”列创建的“ IsIdentity”设置为“是”。如果我将其设置为“否”,通过在设计模式下打开表格,下一个迁移将给出错误。

在尝试了一些选项后,我发现如果我添加另一个带有 [Key] 属性的“虚拟”列,则该表将使用 2 个键创建,并且没有一个将标识设置为“是”。通过这种方式,可以插入保持原始“OrderNO”值的新行,并使用“Find”方法更新行。自然,“Find”方法现在需要 2 个参数,虚拟列(其值始终为 0(零))和原始的“OrderNo”。

虽然它有效,但我知道这不是正确的做法,我想知道是否有人知道如何去做。

注意:我知道我可以使用查询找到实体,它不需要“OrderNo”作为键,但我读到“查找”(使用主键)有一些优势。

【问题讨论】:

  • 您关闭了身份约束。 bennadel.com/blog/…
  • 好的,但是如何在 EF 中做到这一点?我没有看到任何数据属性。也许使用 Fluent API?
  • 两者都存在,但仅在您第一次创建表stackoverflow.com/a/19313131/150342stackoverflow.com/a/18917348/150342 时才有效
  • 我想知道您将如何使两个数据库保持同步。您是否考虑过在其他数据库而不是表中创建链接视图?
  • 科林:谢谢!第一个链接上的解决方案对我有用。我只是无法理解“它只在第一次工作”的言论。这还不够吗?

标签: c# sql-server entity-framework


【解决方案1】:

我不知道如何在 Entity Framework 中设置选项,但从 SQL 的角度来看,启用插入标识列的命令是 SET IDENTITY_INSERT ON。

http://technet.microsoft.com/en-us/library/ms188059.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 2016-09-20
    • 2022-01-15
    • 2021-05-21
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多