【问题标题】:Migrating from Nhibernate to EF6从 Nhibernate 迁移到 EF6
【发布时间】:2015-07-23 10:53:25
【问题描述】:

我目前有一个 .NET 应用程序,它有一个带有主键 GUID 的 SQL Sever 数据库。我们将 NHibernate 用于 ORM,但希望切换到最新版本的 Entity Framework 并使用 Identities(INTs) 作为我们的主键。

有没有人有任何经验或参考资料可以帮助我完成这个过渡?迁移数据和实施新 ORM 的最简单方法是什么?

【问题讨论】:

标签: c# sql-server database entity-framework nhibernate


【解决方案1】:

这是一项重大更改,没有任何工具可帮助您进行此类迁移。您最好的选择是坚持使用 NHibernate。如果一定要改,就需要自己手动编写一个数据迁移工具。

【讨论】:

    【解决方案2】:

    如果您因为迁移到 EF 而选择使用 int 键,您实际上不需要更改它,并且可以保留现有数据,请查看this

    但是,如果您出于其他原因需要移至 int 键,那将是困难的,也不是那么容易的。关于 GUID 的一件事是它永远不会重复,所以你可以做这样的事情,

    1. 导出当前结构中的所有 GUID(假设表名为 key_table)并插入到具有自动生成 ID 的新数据库中的表中。像这样的,

    --------------------------------------------------
    | Id | OldKey                                  |
    --------------------------------------------------
    | 1|   3d09565d-eb84-4e9c-965c-d530c1be8cf2    |
    --------------------------------------------------
    | 2|   54a93dbc-7ce8-4c88-a8e0-70cc48a84073    |
    --------------------------------------------------
    
    1. 当您插入时,您可以使用 select 语句从该表中获取键。无论您需要主键还是外键,诸如此类,

      SET IDENTITY_INSERT User_Table ON;

      插入到 User_Table (Id,RoleId,UserName,...) 值(从 key_table 中选择 id,其中 OldKey = '3d09565d-eb84-4e9c-965c-d530c1be8cf2'),(从 key_table 中选择 id,其中 OldKey = '54a93dbc-7ce8-4c88-a8e0-70cc48a84073'),'用户 1',.. .);

      SET IDENTITY_INSERT User_Table 关闭;

    这将是最简单的方法,但使用这种方法,新数据库中的 id 列将不是线性的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 2018-08-22
      相关资源
      最近更新 更多