Одностраничное приложение, upshot.js, DbContext и DbDataController: поддерживаются только модели сущностей? - PullRequest
7 голосов
/ 19 марта 2012

При использовании примеров для одностраничного приложения у меня есть следующий TodoItem контроллер:

public partial class MVC4TestController : DbDataController<MVC4TestContext>
{
    public IQueryable<TodoItem> GetTodoItems()
    {
        return DbContext.TodoItems.OrderBy(t => t.TodoItemId);
    }
}


Вопрос 1:
Кажется, что поддерживаются только EntityModels?
При использовании реальной модели представления (модель, используемая только для представлений, не используемая как отображение 1: 1 для объекта базы данных), DbDataController не поддерживает это.

Также использование Linq.Translations или PropertyTranslator , похоже, не работает, см. Этот фрагмент кода:

private static readonly CompiledExpressionMap<TodoItem, string> fullExpression =
    DefaultTranslationOf<TodoItem>.Property(t => t.Full).Is(t => t.Title + "_" + t.IsDone);

public string Full
{
    get
    {
        return fullExpression.Evaluate(this);
    }
}


Вопрос 2:
Каков рекомендуемый дизайн при использовании SPA, DBContext и ViewModels?

1 Ответ

3 голосов
/ 23 марта 2012

Насколько я знаю, это - использование "реальных" классов моделей, связанных с DbContext. У меня та же проблема, что и у вас - мне нужно использовать свои собственные объекты DTO, которые являются «плоскими». Сериализация Json в настоящее время не может сериализовать данные, которые имеют родительские ссылки в дочерних объектах (циклические ссылки). Обычно в любом случае мне не нужно дерево сущностей, поэтому я создал меньшие классы, которые идеально подходят для представления. Я попытался использовать обычный контроллер с JsonResult и проанализировал возвращенную модель в ko.mapping.fromJS после получения данных. Это работает нормально. Но вы должны позаботиться обо всех приятных вещах, с которыми сгенерированные MVC4 модели уже имеют дело (например, создание навигации и т. Д.) Может быть, кто-то найдет способ «подделать» DbContext с данными DTO.

...