从 Nhibernate 迁移到 EF6
Migrating from Nhibernate to EF6
我目前有一个 .NET 应用程序,它有一个 SQL 服务器数据库,主键有 GUID。我们正在为 ORM 使用 NHinbernate,但想切换到最新版本的 Entity Framework 并使用 Identities(INTs) 作为我们的主键。
有没有人有任何经验或参考可以帮助我完成这一转变?迁移数据和实施新 ORM 的最简单方法是什么?
这是一项重大更改,没有可用的工具来帮助您进行此类迁移。您最好的选择是坚持使用 NHibernate。如果一定要改,就需要自己手动写一个数据迁移工具。
如果你因为迁移到EF而选择使用int键,其实你不需要改变它,你可以保留现有数据,看看this。
但是如果您出于某些其他原因需要迁移到 int 键,这将很难而且不会那么容易。关于 GUID 的一件事是它永远不会重复,所以你可以这样做,
- 导出当前结构中的所有 GUID(假设 table 名称为 key_table)并使用自动生成的 ID 插入新数据库中的 table。像这样,
--------------------------------------------------
| Id | OldKey |
--------------------------------------------------
| 1| 3d09565d-eb84-4e9c-965c-d530c1be8cf2 |
--------------------------------------------------
| 2| 54a93dbc-7ce8-4c88-a8e0-70cc48a84073 |
--------------------------------------------------
插入时,可以使用 select 语句从此 table 中获取密钥。无论你需要主键还是外键,都是这样的,
设置IDENTITY_INSERTUser_Table开启;
插入 User_Table(Id、RoleId、用户名...)
VALUES (select id from key_table where OldKey = '3d09565d-eb84-4e9c-965c-d530c1be8cf2'),(select id from key_table where OldKey = '54a93dbc-7ce8 -4c88-a8e0-70cc48a84073'),'User 1',...);
设置IDENTITY_INSERTUser_Table关闭;
这将是最简单的方法,但是使用这种方法,id 列在您的新数据库中将不是线性的。
我目前有一个 .NET 应用程序,它有一个 SQL 服务器数据库,主键有 GUID。我们正在为 ORM 使用 NHinbernate,但想切换到最新版本的 Entity Framework 并使用 Identities(INTs) 作为我们的主键。
有没有人有任何经验或参考可以帮助我完成这一转变?迁移数据和实施新 ORM 的最简单方法是什么?
这是一项重大更改,没有可用的工具来帮助您进行此类迁移。您最好的选择是坚持使用 NHibernate。如果一定要改,就需要自己手动写一个数据迁移工具。
如果你因为迁移到EF而选择使用int键,其实你不需要改变它,你可以保留现有数据,看看this。
但是如果您出于某些其他原因需要迁移到 int 键,这将很难而且不会那么容易。关于 GUID 的一件事是它永远不会重复,所以你可以这样做,
- 导出当前结构中的所有 GUID(假设 table 名称为 key_table)并使用自动生成的 ID 插入新数据库中的 table。像这样,
--------------------------------------------------
| Id | OldKey |
--------------------------------------------------
| 1| 3d09565d-eb84-4e9c-965c-d530c1be8cf2 |
--------------------------------------------------
| 2| 54a93dbc-7ce8-4c88-a8e0-70cc48a84073 |
--------------------------------------------------
插入时,可以使用 select 语句从此 table 中获取密钥。无论你需要主键还是外键,都是这样的,
设置IDENTITY_INSERTUser_Table开启;
插入 User_Table(Id、RoleId、用户名...) VALUES (select id from key_table where OldKey = '3d09565d-eb84-4e9c-965c-d530c1be8cf2'),(select id from key_table where OldKey = '54a93dbc-7ce8 -4c88-a8e0-70cc48a84073'),'User 1',...);
设置IDENTITY_INSERTUser_Table关闭;
这将是最简单的方法,但是使用这种方法,id 列在您的新数据库中将不是线性的。