2016-01-20 28 views
2

我有一個包含兩個導航屬性的類。實體框架中的多個自引用屬性代碼優先

public class Entity 
{ 
    public int Id { get; set; }  
    public Entity Parent { get; set; }  
    public Entity BaseEntity { get; set; } 
} 

當運行該應用程序EF拋出expcetion它說 「無法確定的類型‘Test.Entity’和‘Test.Entity’。這種關聯的主要端部之間的關聯的主要端必須使用關係流暢API或數據註釋來顯式配置「。

據我所知,當定義一對一關係並且沒有提供EF提示來正確確定關係的兩邊時,會引發此異常。

現在我有兩個問題。

首先,爲什麼在這裏提出這個例外?英孚能否以某種方式將這種情況視爲一對一的關係?

二,如何使用屬性解決這個問題? 我知道下面的Fluent API代碼解決了這個問題,但我更熟悉屬性。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Entity>().HasOptional(e => e.Parent).WithOptionalDependent(); 
    modelBuilder.Entity<Entity>().HasOptional(e => e.BaseEntity).WithOptionalDependent(); 
} 

回答

1

我在MSDN上找到了我的問題的答案。

https://social.msdn.microsoft.com/Forums/en-US/08bba96a-20b2-4a3c-9e0e-a5475b703dfe/code-first-self-referencing-foreign-key?forum=adodotnetentityframework

並根據批准的答案(由羅恩·米勒),下面的代碼正確描述的關係(不是我的代碼)。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{   
    modelBuilder.Entity<AssetType>().HasOptional(a => a.parent).WithMany(); 
    modelBuilder.Entity<AssetType>().HasOptional(a => a.baseAssetType).WithMany(); 
}