我需要将“订单”表发布到网站,但由于超出此范围的原因,网络应用程序无法直接访问公司的数据库。解决方案是创建相同的“订单”表另一个数据库(在远程 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”作为键,但我读到“查找”(使用主键)有一些优势。