2016-05-04 2 views
0

У меня есть вызов odata, который работает правильно в первый раз, но сбой во время любого последующего вызова из-за несоответствующих свойств. Мой контроллер имеет очень мало логики, так как он просто отвечает за вызов моей службы домена для запроса базы данных Entity Framework и возврата результатов в виде моделей представлений. Однако, когда я пытаюсь сортировать, я получаю сообщение об ошибке, потому что иерархия моей модели представления не соответствует моей модели домена.Odata: Mapping View Model to Domain Model

домена Модель:

public class Parent 
{ 
    public object Child 
    { 
    public string Name 
    } 
} 

вид Модель:

public class Parent 
{ 
    public string ChildName 
} 

Используя приведенные выше примеры запроса EF будет возвращать список родителей, которые я хотел бы преобразовать для просмотра моделей отсылают к клиент. Когда запрос сортировки выполняется в ChildName, odata терпит неудачу, потому что у родителя нет понятия ChildName. Мне нужно сопоставить имя ChildName с именем Child.Name. Я видел примеры людей, использующих EntitySets, чтобы изменить имя, но ни один из них не отобразит модель в моем случае.

ответ

0

В результате я использовал EF для преобразования моей модели домена в модель представления с использованием выражения LINQ во время запроса. Пример, но изменили модель представления в ParentView и добавил конструктор:

var query = from p in context.Parent select new ParentView(p.Child.Name) 

Положительным этого является то, что все это выполняется в базе данных, так что я не транспортирующего ненужные данные. Кроме того, я могу продолжать использовать опции odata в запросе, так как odata добавит в запрос. Однако я не могу не чувствовать, что это не лучший способ.