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

问题描述 投票:90回答:3

我有一个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 ]"}

entity-framework mapping ef-code-first foreign-key-relationship entity-framework-4.1
3个回答
141
投票

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

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

5
投票

我更喜欢这个(下面):

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

因为EF在数据库表中创建了2个外键:CountryId和CountryId1,但上面的代码修复了这个。


1
投票

我现在有同样的问题,我有外键,我需要把它作为可空,解决这个问题,你应该把

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

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

© www.soinside.com 2019 - 2024. All rights reserved.