我有一个 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 ]"}
您必须使您的外键可以为空:
public class User
{
public int Id { get; set; }
public int? CountryId { get; set; }
public virtual Country Country { get; set; }
}
我更喜欢这个(下):
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,但上面的代码修复了该问题。
我现在有同样的问题,我有外键,我需要把它设置为可空的,要解决这个问题,你应该把
modelBuilder.Entity<Country>()
.HasMany(c => c.Users)
.WithOptional(c => c.Country)
.HasForeignKey(c => c.CountryId)
.WillCascadeOnDelete(false);
在 DBContext 课上我很抱歉很晚才回复你:)
我建议首先阅读 Microsoft guide for use Relations, Navigation Properties and Foreign Keys in EF Code First,就像这张图片。
https://i.stack.imgur.com/G2bKa.png
指导链接如下:
https://docs.microsoft.com/en-gb/ef/ef6/fundamentals/relationships?redirectedfrom=MSDN
if
(eww)Guid
的键。 (当然,这使它们可以为空,但是由于自动生成的外键约束,将外键设置为空的记录保存到数据库失败。):-(