实体框架代码-首先为空的外键

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

140401 次浏览

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

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

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

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

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

我比较喜欢这个(下面) :

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

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

我建议阅读微软指南,在 EF 代码首先使用 关系、导航属性和外键,像这张图片。

enter image description here

指南连结如下:

Https://learn.microsoft.com/en-gb/ef/ef6/fundamentals/relationships?redirectedfrom=msdn