我需要向网站发布“订单”表,但由于超出此范围的原因,网络应用程序无法直接访问公司的数据库。解决方案是创建相同的“订单” “在另一个数据库中的表(在远程IIS服务器上)并将原始订单(行)导出到它。为此,我使用EF 5和AutomaticMigrationsEnabled = true
原始的“Orders”表有一个名为“OrderNo”的键列,其中“IsIdentity = Yes”。我希望web“Orders”表也将其“OrderNo”作为键列,这样我就可以使用“Find”方法来定位和更新行,但问题出在这里:
我无法将“OrderNo”设置为标识,因为它必须保留原始的“OrderNo”值,但是在运行“PM> update-database”之后,将使用“OrderNo”列创建“Orders”表“ IsIdentity“设为”是“。如果我将其设置为“No”,通过在设计模式下打开表,下一次迁移将给出错误。
在尝试了一些选项之后,我发现如果我添加另一个带有[Key]属性的“虚拟”列,则表创建了2个键,没有一个标识设置为“是”。通过这种方式,可以插入保留原始“OrderNO”值的新行,并使用“Find”方法更新行。当然,“查找”方法现在需要2个参数,虚拟列(其值始终为0(零))和原始“OrderNo”。
虽然它有效,但我知道这不是正确的做法,我想知道是否有人知道该怎么做。
注意:我知道我可以使用查询找到实体,这不需要“OrderNo”作为键,但我读“查找”(使用主键)有一些优点。
答案 0 :(得分:1)
我不知道在Entity Framework中设置选项,但是从SQL的角度来看,启用插入标识列的命令是SET IDENTITY_INSERT ON。