Entity Framework Core可空外键

24
我有困难获取一个外键值可能为null的实体列表。 模型:
public class Company
{
    [Key]
    [Required]
    public int Id { get; set; }
    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }
    [Display(Name = "Main Phone")]
    public string LandPhone { get; set; }
    [Display(Name = "Fax")]
    public string FaxPhone { get; set; }
}

public class Contact
{
    [Key]
    [Required]
    public int Id { get; set; }
    [Display(Name ="First Name")]
    public string FirstName { get; set; }
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    [EmailAddress]
    public string Email { get; set; }
    [Display(Name = "Mobile Phone")]
    public string MobilePhone { get; set; }
    [Display(Name = "Office Phone")]
    public string LandPhone { get; set; }
    [Display(Name = "Fax")]
    public string FaxPhone { get; set; }
    public string Title { get; set; }
    public int CompanyId { get; set; }
    [ForeignKey("CompanyId")]
    public Company Company { get; set; }
}

当我尝试获取所有联系人列表时,如果其中一个联系人在我的数据库中的CompanyId列中具有空值,则它将跳过该联系人并不会返回其信息。例如,以下查询语句:var contacts = _context.Contacts.Include(c => c.Company).ToList(); 只返回以下表格中的Josh Stone一行:

Contacts Table

我使用的是Entity Framework Core 1.0.0。非常感谢您的帮助。
1个回答

34

假设它确实返回了mary,你会期望她的CompanyId是什么?我会怀疑是null(还能是什么呢?),在这种情况下,你的模型是错误的,应该将 public int CompanyId { get; set; } 更改为 public int? CompanyId { get; set; }


3
我正在使用mysql作为数据库,根据您的解决方案,外键将不会设置为空,而是为0。然后mysql会抛出异常,表示无法在相关表中找到插入的键。我该如何解决? - Hamed Hamedi
@HamedHamedi 这与解决方案无关。您可能是使用数据库优先的方式创建了带有默认值的表,或者您使用了代码优先的方式,但设置不正确。 - Robert McKee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接