2013-02-03 29 views
1

我有以下實體:一到零或一的關係,具有自

public class Category 
{ 
    public int ID { get; set; }  
    public int? ParentID { get; set; } 
    public string Name{ get; set; } 
    public virtual Category Parent { get; set; } 
} 

到我試圖定義一個關係:一個Category可以有一個父類。
我已經定義的主鍵:

HasKey(m => m.ID); 

我讀過this例子,其中包括一對零或一對一的關係,但我無法掌握到底有HasRequired暗指實體在關係中是可選的。

回答

0

我認爲一個側面的問題是,你不能引用完全相同的類作爲EF中的父類,你可以使用的是Projection,以便爲同一類型擁有不同的屬性。

HasOptional在孩子參考具有的話說,我可以讓你引用一個孩子有一個ParentId這既是一個主鍵和外鍵的家長或不

0

在本例中同樣的效果。當父母和孩子是不同的實體(和不同的數據庫表)時,這是可以的,但當他們是自我引用時則不行。 Category必須有一個既是主要的也是外來的ID。但是,主鍵應該是唯一的,所以實際上沒有空間讓1:1的孩子共享相同的密鑰。

你能做什麼?我認爲唯一的選擇是將關聯映射爲1:n,並執行n不能大於1的業務規則。請注意,這不是EF限制。沒有可以想象的關係數據庫模型來將自引用關聯限制爲1:1。

+0

當然,父母和子女是不同的實體 - ID是主鍵,ParentID是外鍵(對另一個實體的ID) –

+0

是的,但在示例中說* OfficeAssignment具有InstructorID屬性,它是主鍵鍵和外鍵*。所以它需要父母的PK,並將其複製爲自己的PK,這是一個FK。顯然,當兩個實體存儲在同一個表中時,這是不可能的。 –

相關問題