7

当使用单页应用程序的示例时​​,我有以下TodoItem控制器:

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


问题1:
似乎只支持EntityModels?
当使用真正的 ViewModel(模型仅用于 View,不用作与数据库实体的 1:1 映射)时,DbDataController 不支持这一点。

同样使用Linq.TranslationsPropertyTranslator似乎不起作用,请参阅此代码摘录:

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 时推荐的设计是什么?

4

1 回答 1

3

据我所知,到目前为止 - 它坚持使用绑定到 DbContext 的“真实”模型类。我和你有同样的问题——我需要使用我自己的“平面”DTO 对象。Json 序列化当前无法序列化在子对象中具有父引用的数据(循环引用)。通常我无论如何都不需要实体树,所以我创建了更小的类,它们完全适合视图。我尝试使用带有 JsonResult 的普通控制器,并在检索数据后将返回的模型解析为 ko.mapping.fromJS。那工作正常。但是 - 你必须照顾 MVC4 生成的视图模型已经处理的所有好东西(比如创建导航等)。也许有人找到了一种解决方法来“伪造”带有 DTO 数据的 DbContext。

于 2012-03-23T07:42:25.623 回答