Как мне заставить Entity Framework использовать интерфейсы на сгенерированных классах? - PullRequest
1 голос
/ 02 февраля 2010

У меня есть проект, в котором клиент использует Entity Framework, и я пытаюсь абстрагировать сгенерированные классы от остальной части приложения.

Один сгенерированный класс - это Category, в котором в качестве свойства указано «Type».

Я создал интерфейс, который я хочу реализовать в категории, например:

public interface ICategory
{
    string Type { get; set;}
}

Я уже делал это в LINQ to SQL, и он отлично работает. Я создаю частичный класс в отдельном файле, и он реализует интерфейс:

public partial class Category: ICategory
    //implement interface

Однако при использовании EF всякий раз, когда я пытаюсь построить запрос с EF, он говорит, что не поддерживает OfType <> ().

Пример:

var query = from c in DataContext.Category
            where Type == "some type"
            select c;

var resultsList = query.OfType<ICategory>(); //error here (not supported)

Что я здесь не так делаю?

Другие вещи, на которые стоит обратить внимание: я разрабатываю это в приложении silverlight, и контекст данных фактически извлекается из службы, поэтому здесь также происходят отношения клиент-сервер.

1 Ответ

1 голос
/ 02 февраля 2010

Как правило, LINQ to Entities может понимать только то, что является частью вашей модели сущности (EDMX).Таким образом, хотя вы можете расширять свои типы сущностей как частичные классы, вы не можете использовать свойства, методы и ссылки на интерфейсы, которые вы добавляете туда в запросах LINQ to Entities, , за исключением определенных очень специфических функций.*

Однако в этом случае следующий запрос должен дать желаемый результат:

var resultsList = query.Select<ICategory>(c => c);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...