您发布展示了如何使用EF代码首先创建管理器的导航属性并将其映射到类型人的例子 -
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类型为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理解它是一个外键,并且一切都很开心。
有趣。然而,我所有的主键被称为Id,所以我需要告诉EF FK应该映射到哪个表。我很困惑,显然有两种方式,尽管我只能让他们中的一个工作。 –
那么,如果它仍处于开发早期,并且您可以使用默认约定,那么我将使用'SalesLeadId'而不是SalesLead_Id,您将使您的生活更轻松。 –
为什么SalesLeadId比SalesLead_Id更好? –