从Nhibernate迁移到EF6

时间:2015-05-12 13:54:37

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

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

有没有人有任何经验或参考资料可以帮助我进行这种转变?什么是迁移数据和实施新ORM的最简单方法?

2 个答案:

答案 0 :(得分:2)

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

但是如果由于某些其他原因需要转移到int键,那么它会很难并且不那么容易。关于GUID的一件事是它永远不会重复,所以你可以做这样的事情,

  1. 导出当前结构中的所有GUID(假设表名为key_table),并使用自动生成的id插入新数据库的表中。像这样的东西,
  2. --------------------------------------------------
    | 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,...) VALUES(从key_table中选择id,其中OldKey =' 3d09565d-eb84-4e9c-965c-d530c1be8cf2'),(从key_table中选择id,其中OldKey =' 54a93dbc-7ce8-4c88-a8e0-70cc48a84073&#39 ;),'用户1',...);

      SET IDENTITY_INSERT User_Table OFF;

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

答案 1 :(得分:1)

这是一个重大变化,没有可用的工具来帮助您进行此类迁移。你最好的选择是坚持NHibernate。如果必须更改,则需要自己手动编写数据迁移工具。