我目前有一个.NET应用程序,它有一个带有主键GUID的SQL Sever数据库。我们将NHinbernate用于ORM,但希望切换到最新版本的Entity Framework并使用Identities(INTs)作为主键。
有没有人有任何经验或参考资料可以帮助我进行这种转变?什么是迁移数据和实施新ORM的最简单方法?
答案 0 :(得分:2)
如果您因为迁移到EF而选择使用int键,那么您实际上并不需要更改它,并且您可以保留现有数据,请查看this。
但是如果由于某些其他原因需要转移到int键,那么它会很难并且不那么容易。关于GUID的一件事是它永远不会重复,所以你可以做这样的事情,
--------------------------------------------------
| Id | OldKey |
--------------------------------------------------
| 1| 3d09565d-eb84-4e9c-965c-d530c1be8cf2 |
--------------------------------------------------
| 2| 54a93dbc-7ce8-4c88-a8e0-70cc48a84073 |
--------------------------------------------------
插入时,可以使用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;
这是最简单的方法,但使用这种方法,id列在新数据库中不是线性的。
答案 1 :(得分:1)
这是一个重大变化,没有可用的工具来帮助您进行此类迁移。你最好的选择是坚持NHibernate。如果必须更改,则需要自己手动编写数据迁移工具。