【发布时间】: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/150342 和stackoverflow.com/a/18917348/150342 时才有效
-
我想知道您将如何使两个数据库保持同步。您是否考虑过在其他数据库而不是表中创建链接视图?
-
科林:谢谢!第一个链接上的解决方案对我有用。我只是无法理解“它只在第一次工作”的言论。这还不够吗?
标签: c# sql-server entity-framework