2013-04-25 25 views
0

我有三個簡單的類如何添加複雜的財產EF代碼第一次

public class Asset 
{ 
    public int ID {get;set;} 
    public virtual Category {get;set;} 
} 

public class Category 
{ 
    public int ID {get;set;} 
} 

public class AssetCollection 
{ 
    public int ID {get;set;} 
    public virtual ICollection<Asset> Assets {get;set;} 

    ??????public bool HasAssetWithCategory(int ID) 
    { 
    ???????????? 
    } 
} 

我希望能夠選擇從上下文中HasAssetWithCategory這樣

var assets = context.AssetCollections.Where(m => m.HasAssetWithCategory(SomeID)); 

我沒有線索甚至從哪裏開始。

回答

0

HasAssetCategory是您已經定義且不能轉換爲SQL語句的方法。因此,EntityFramework無法執行您擁有的查詢。相反,你應該嘗試此查詢,

var assets = context.AssetCollections.Where(m => m.Assets.Any(a => a.ID == someID)); 
+0

所以我不能添加此類似屬性,而是我需要我必須使用它的任何地方寫? :( – SpoksST 2013-04-25 15:29:25

+0

你可以在你的上下文中爲它添加一個方法,或者把整個東西包裝到一個倉庫中。 – Stu 2013-04-25 18:50:45

+0

這個問題讓我很好奇在EF中實現擴展方法。在codereview上有一個關於創建泛型輔助方法的相關文章爲實體生成POCO - http://codereview.stackexchange.com/questions/3895/creating-extension-method-to-map-entity-with-subentities-object-to-poco-object。閱讀一些評論因爲他們可能會幫助您完成此任務,特別是將'SomeID'傳遞給'MemberInitExpression'的一個實例http://msdn.microsoft.com/zh-cn/library/bb301790.aspx。實際上,我喜歡扁平化我的實體進入視圖模型。 – 2013-04-26 11:33:11