ForeignKey(字符串)属性

如果需要不遵循 EF 约定的外键,则指定自定义外键名称。

public class Person 
{
    public int IdAddress { get; set; }

    [ForeignKey(nameof(IdAddress))]
    public virtual Address HomeAddress { get; set; }
}

当你与同一实体类型有多个关系时,也可以使用此选项。

using System.ComponentModel.DataAnnotations.Schema;

public class Customer
{
    ...

    public int MailingAddressID { get; set; }
    public int BillingAddressID { get; set; }

    [ForeignKey("MailingAddressID")]
    public virtual Address MailingAddress { get; set; }
    [ForeignKey("BillingAddressID")]
    public virtual Address BillingAddress { get; set; }
}

如果没有 ForeignKey 属性,EF 可能会在获取 MailingAddress 时将它们混淆并使用 BillingAddressID 的值,或者它可能会根据自己的命名约定(如 Address_MailingAddress_Id)为列提供不同的名称并尝试使用相反(如果你将其与现有数据库一起使用,则会导致错误)。