更改外键:无法将值NULL插入列中

时间:2015-02-28 21:19:20

标签: c# asp.net-mvc entity-framework ef-migrations

我的EF数据库中有一些数据。我想在我的一个类中更改外键:

[ForeignKey("Collection")]
public int CollectionID { get; set; }

不幸的是我收到了这个错误

  

无法将值NULL插入列'CollectionID',表'WebLanguageTeacher1.dbo.Words';列不允许空值。更新失败。

当我尝试将新迁移添加到我的数据库时。这是可以理解的:foregin key不能为null,当我在db中创建新列时,Entity Framework会创建新的NULL单元格。

问题是:我该怎么做才能绕过它?尽管如此,我怎样才能添加新的外键?

2 个答案:

答案 0 :(得分:0)

我之前有类似的情况,虽然在我的情况下它是主键。

我通过编辑迁移脚本来传递它。

答案 1 :(得分:0)

这实际上不是实体框架代码第一个问题,而是数据库问题。

如果您尝试向表中添加列,然后使用主键表添加外键约束,则会出现相同的错误。

原因是您已创建列为null,作为每个现有记录的默认值。然后,在应用约束时,您将尝试将null与父表的主键相关联。

因此,解决方案是以下几种选择之一:

如果不需要当前数据(应用程序的初始开发),则清除数据 - 这将允许创建关系,并且仅在添加数据时生效。

为父列中具有现有值的新列设置默认值,以便任何记录都不会无法找到父键值。所以,如果你知道总会有一个值为' 1'在父表中,您可以使用' 1'作为默认设置(仅限临时解决方案 - 将在实时应用程序的未来允许无效数据)。

创建没有关系的列,使用相关值填充列,然后添加约束。