实体框架代码 - 首先是null外键

时间:2011-04-14 19:46:28

标签: entity-framework mapping ef-code-first foreign-key-relationship entity-framework-4.1

我有User< Country模型。用户属于某个国家/地区,但可能不属于任何(空外键)。

如何设置?当我尝试插入具有空国家/地区的用户时,它告诉我它不能为空。

模型如下:

 public class User{
    public int CountryId { get; set; }
    public Country Country { get; set; }
}

public class Country{
    public List<User> Users {get; set;}
    public int CountryId {get; set;}
}

错误:A foreign key value cannot be inserted because a corresponding primary key value does not exist. [ Foreign key constraint name = Country_Users ]"}

4 个答案:

答案 0 :(得分:138)

您必须使您的外键可以为空:

public class User
{
    public int Id { get; set; }
    public int? CountryId { get; set; }
    public virtual Country Country { get; set; }
}

答案 1 :(得分:3)

我喜欢这个(如下):

public class User
{
    public int Id { get; set; }
    public int? CountryId { get; set; }
    [ForeignKey("CountryId")]
    public virtual Country Country { get; set; }
}

因为EF在数据库表中创建了两个外键:CountryId和CountryId1,但是上面的代码解决了这个问题。

答案 2 :(得分:3)

我建议阅读Microsoft指南,以在EF Code First中使用关系,导航属性和外键,就像这张图片一样。

enter image description here

下面的指南链接:

https://docs.microsoft.com/en-gb/ef/ef6/fundamentals/relationships?redirectedfrom=MSDN

答案 3 :(得分:0)

我现在有同样的问题, 我有外键,需要将其设置为可为空, 要解决此问题,您应该放

    modelBuilder.Entity<Country>()
        .HasMany(c => c.Users)
        .WithOptional(c => c.Country)
        .HasForeignKey(c => c.CountryId)
        .WillCascadeOnDelete(false);

在DBContext类中 很抱歉很晚才回答你:)