C# 从Nhibernate迁移到EF6

C# 从Nhibernate迁移到EF6,c#,sql-server,database,entity-framework,nhibernate,C#,Sql Server,Database,Entity Framework,Nhibernate,我目前有一个.NET应用程序,它有一个SQL Server数据库,其中包含主键的GUID。我们正在为ORM使用NHinbernate,但希望切换到最新版本的实体框架,并使用标识作为主键 有没有人有任何经验或参考资料可以帮助我完成这一转变?迁移数据和实现新ORM的最简单方法是什么 这是一个突破性的变化,没有工具可以帮助您进行这种迁移。你最好的选择是坚持使用NHibernate。如果必须更改,则需要自己手动编写数据迁移工具。如果由于迁移到EF而选择使用int键,则实际上不需要更改,并且可以保留现有数

我目前有一个.NET应用程序,它有一个SQL Server数据库,其中包含主键的GUID。我们正在为ORM使用NHinbernate,但希望切换到最新版本的实体框架,并使用标识作为主键


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

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

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

但是如果你因为其他原因需要切换到int键,那就很难了,也不是那么容易。GUID的一个特点是它从不重复,所以您可以这样做

导出当前结构中的所有GUID,假定表名为key_table,并使用自动生成的id插入到新数据库中的表中, 执行insert时,可以使用select语句从此表中获取密钥。需要主键或外键的地方

在上设置标识\u插入用户\u表

插入用户_表Id、RoleId、用户名,。。。 值从键_表中选择id,其中OldKey='3d09565d-eb84-4e9c-965c-d530c1be8cf2',从键_表中选择id,其中OldKey='54a93dbc-7ce8-4c88-a8e0-70cc48a84073','User 1'

设置标识\u插入用户\u表为OFF


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

我遵循了一个类似于marc_在这里的评论的过程。我使用ROWNUMBER为新键添加种子。
--------------------------------------------------
| Id | OldKey                                  |
--------------------------------------------------
| 1|   3d09565d-eb84-4e9c-965c-d530c1be8cf2    |
--------------------------------------------------
| 2|   54a93dbc-7ce8-4c88-a8e0-70cc48a84073    |
--------------------------------------------------