2011-12-02 9 views
0

我有以下兩個實體在我的應用程序(使用的Code First):實體框架 - 確定是否存在關係,而不在一端的導航屬性

public class Note 
{ 
    public int NoteId { get; set; } 
    public string Text { get; set; } 
} 

public class Decision 
{ 
    // PK/FK 
    public int NoteId { get; set; } 

    // other fields ... 

    public virtual Note Note { get; set; } 
} 

我可以這樣來配置我的關係:

modelBuilder.Entity<Decision>().HasRequired(d => d.Note).WithOptional(); 

決定必須有一個註釋,但注意並不總是有一個決定。一邊是1:1映射是可選的。

我想要一個屬性在我的筆記,讓我知道是否有一個決定。就像這樣:

public bool HasDecision 
{ 
    get 
    { 
     // not sure what to do here 
    } 
} 

有沒有辦法做到這一點,而沒有決定是一個懶的加載屬性上注意?

回答

0

你需要做一個明確的查詢。沒有像「標量屬性延遲加載代理」這樣的事情。延遲加載僅支持導航屬性。如果您想將HasDecision作爲實體的屬性,則您的實體必須具有對上下文的引用。我更願意創造像這樣一個存儲庫或服務的方法:

public bool HasDecision(Note note) 
{ 
    return _context.Decisions.Any(d => d.NoteId == note.NoteId); 
} 
+0

我想我可能最終不得不只是爲此創建存儲庫/服務的方法,但我不知道是否有可能對實體本身做。將實體的引用傳遞給實體可能是不可取的? – Dismissile

+0

@Dismissile:是的,在我看來,這是不可取的:1)由於POCO實體總體上被認爲是「持久性無知」的想法,2)由於POCO和背景的可能不同生命週期:將上下文注入實體,然後處理上下文。使用你的財產然後(=發出查詢)會拋出一個異常。那麼,後者對於懶惰加載的導航屬性也是如此。 – Slauma

+0

在我看來,生存問題並不是真正的問題,因爲我的上下文是針對請求的整個生命週期,但我確實同意他們應該根本沒有任何關於上下文的參考。感謝您的輸入。 – Dismissile