2013-05-25 29 views
0

我試圖用ForeignKeyAttribute定義兩個表之間的關係。 我來了一個十字架的幾個網站,描述了這樣做的一個有趣的方法與ForeignKeyAttribute用Code First定義ForeignKeys

下面是兩個代碼示例:

第一個:

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; }(Order-和CustomerID)的第二個代碼示例中。

我的問題是,我如何知道在哪種情況下使用哪種方法?

我知道這也可以使用Fluent API來完成,但這個問題目前無關緊要。

回答

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的價值即可使用。

+0

嗨,關於你的最後一行,除此之外,以任何方式使用哪種方法沒有區別? – Yustme

+0

是的,放置「ForeignKey」的位置並沒有什麼不同 – SOfanatic