Могу ли я создать свойства "relay" или "genericized" для моделей Entity Framework? - PullRequest
0 голосов
/ 09 января 2011

Надеюсь, моя формулировка имеет смысл ... Я не совсем уверен, как именно объяснить, что я собираюсь сделать.

У меня есть метод в общем классе, который возвращает список объектов следующим образом:

public abstract class ChildCRUDController<TModel> : CRUDController<TModel, ... >
    where TModel : IChildEntity

public ViewResult List(int id)
{
    return View(repository.GetMany(x => x.ParentID == id));
}

Этот контроллер реализован довольно многими другими контроллерами. У меня проблема в том, что не все сущности, которые реализуют IChildEntity, имеют один и тот же родительский тип. Чтобы обойти эту проблему, я создал свойства ParentID для всех моделей, которые реализуют IChildEntity, чтобы они могли использовать один и тот же контроллер.

public partial class PhoneNumber : IChildEntity
{
    public int ParentID
    {
        get { return CustomerID; }
        set { CustomerID = ParentID; }
    }
}

и ...

public partial class Transaction : IChildEntity
{
    public int ParentID
    {
        get { return LeaseID; }
        set { LeaseID= ParentID; }
    }
}

Но когда я вызываю метод List выше, я получаю следующую ошибку:

Указанный элемент типа 'ParentID' не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей.

Можно ли каким-то образом добиться результата, которого я ищу, без вытягивания набора объектов в память или переименования всех свойств самих сущностей?

Спасибо!

1 Ответ

1 голос
/ 09 января 2011

Если вы хотите передать имя поля в метод List и создать собственный запрос, вы можете сделать это, используя методы, описанные в этой статье StackOverflow:

Или вы можете предоставить ChildCRUDController другой параметр универсального типа, ограниченный интерфейсом, который предоставляет имя поля, и снова использовать его динамически.

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