我正在尝试使用ForeignKeyAttribute
定义2个表之间的关系。
我找到了几个网站,用ForeignKeyAttribute
描述了一个有趣的方法。
以下是两个代码示例:
第一个:
public class Customer
{
public int ID { get; set; }
public int OrderID { get; set; }
// Some other properties
[ForeignKey("OrderID")]
public virtual Order Order { get; set; }
}
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; }
// Some other properties
[ForeignKey("CustomerID")]
public virtual Customer Customer { get; set; }
}
第二个:
public class Customer
{
public int ID { get; set; }
[ForeignKey("Order")]
public int OrderID { get; set; }
// Some other properties
public virtual Order Order { get; set; }
}
public class Order
{
public int ID { get; set; }
[ForeignKey("Customer")]
public int CustomerID { get; set; }
// Some other properties
public virtual Customer Customer { get; set; }
}
在第一个代码示例中,ForeignKeyAttribute
位于public virtual Customer Customer { get; set; }
。
在public int CustomerID { get; set; }
(订单和客户ID)上的第二个代码示例中。
我的问题是,我如何知道在哪种情况下使用哪种方法?
我知道这也可以使用Fluent API
来完成,但目前这个问题与此问题无关。
答案 0 :(得分:0)
首先,只想说您不需要在任何属性上放置ForeignKey
属性。只需执行以下操作即可:
public class Customer
{
public int ID { get; set; }
//EF will create the relationship since the property is named class+id
//the following is not necessary, is just good practice
//if this is omitted EF will create a Order_Id on its own
public int OrderID { get; set; }
// Some other properties
public virtual Order Order { get; set; }
}
public class Order
{
public int ID { get; set; }
// no need to include the id property
// Some other properties
public virtual Customer Customer { get; set; }
}
话虽如此,答案是ForeignKey
构造接受一个字符串参数。如果将它放在外键属性上,它应该具有导航属性的名称,如果将它放在导航属性上,它应该具有外键的名称。放置的位置完全取决于您,只要您记住要使用的string
值。