如何在Entity Framework Code First中将列更改为唯一标识

时间:2015-03-30 22:08:49

标签: c# entity-framework ef-code-first

自从开始我正在开展的项目以来,我多次重新设计了我的课程计划。

起初我并不知道数据注释,所以我有migration1,其中我的ID没有DatabaseGenerated.Identity选项,而migration4已经拥有它。

事实证明EF不会这样(https://entityframework.codeplex.com/workitem/509和EF5一样),所以当我添加一些种子数据时,它会抛出异常

  

无法将值NULL插入列' primarykeycolumn',table' tablename';列不允许空值。 INSERT失败。

真正有趣的是,当我从头开始删除所有现有迁移和搭建新版本时,种子方法运行没有任何问题。

所以我有一个问题:我是否需要在对方案进行更改时执行此操作,例如添加Identity等数据注释,或者是否有办法保存以前的迁移?因为在现实生活中丢弃和重新创建数据库会导致巨大的数据丢失,我想避免这种情况。

1 个答案:

答案 0 :(得分:0)

添加迁移。在您的软件包管理器控制台中

Add-Migration Test1

在迁移类的Configuration.cs中,您将看到Up方法和Down方法。它就像之前和之后的变化。如果要撤消更改,可以调用它们。

doing Add-Migration "NameoftheMigration" does not implement it

你需要打电话

Update-Database

如果它告诉您存在错误,或潜在的数据丢失。

Update-Database -Force

如果您选择使用CodeFirst。你不能真正从设计改变表,然后通过代码。你必须选择一个。由于CodeFirst Migration依赖于Models。数据优先,依靠数据设计。