2013-04-25 4 views
0

У меня есть три простых классовКак добавить комплексное свойство EF Code First

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

+0

Вы можете добавить метод для него в свой контекст или обернуть всю вещь в репозитории. – Stu

+0

Этот вопрос вызвал у меня интерес к внедрению методов расширения в EF. Есть несколько связанных пост на codereview о создании общего вспомогательного метода для генерировать POCOs для объекта - http://codereview.stackexchange.com/questions/3895/creating-extension-method-to-map-entity-with-subentities-object-to-poco-object. Прочитать некоторые комментарии там, где они могут помочь вам в этой задаче, в частности, передавая «SomeID» экземпляру «MemberInitExpression» http://msdn.microsoft.com/en-us/library/bb301790.aspx. Практически говоря, мне нравится сглаживать мои сущности в модели просмотра. –

Смежные вопросы