您发布的示例显示了如何使用 EF Code-first 创建 Manager 的导航属性并将其映射到类型 Person -
public class Project
{
public int ProjectId { get; set; }
public string Name { get; set; }
public int ManagerId { get; set; }
// The following will use ManagerId as the foreign key and map it to PersonId, or w/e the key field is for person
[ForeignKey("ManagerId")]
public Person Manager { get; set; }
}
您的代码使用 SalesLine_Id 建立与 SalesLine 的外键关系,该关系是 SalesLine 类型。
public class SalesOrderLine : LoggedEntity {
[ForeignKey("SalesLine")]
[Column("SalesLine_Id")]
[Required]
public int SalesLine_Id { get; set; }
public SalesLine SalesLine { get; set; }
}
重要的是要了解,除非您使用奇怪的命名约定,否则您可能不必使用所有注释来装饰您的类,因为 EF 会自动按照您希望的方式映射所有内容,只要名称是相当一致——
public class SalesOrderLine {
public int SalesOrderLineId { get; set; }
public string Description { get; set; }
public int SalesLineId { get; set; }
public virtual SalesLine SalesLine { get; set; }
}
public class SalesLine {
public int SalesLineId { get; set; }
public string Description { get; set; }
public ICollection<SalesOrderLine> SalesOrderLines { get; set; }
}
作为一个例子,它工作得很好。如果您需要使关系更加复杂,您可能需要开始考虑使用 Fluent API 进行配置,但是如果没有数据注释,代码也可以正常工作。由于 SalesLineId 不可为空,因此它是必需的,EF 理解它是一个外键,并且一切都很好。