7

シングル ページ アプリケーションの例を使用する場合、次のTodoItemコントローラーがあります。

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


質問 1:
EntityModels のみがサポートされているようですが?
実際の ViewModel (ビューにのみ使用され、データベース エンティティへの 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 を使用する場合に推奨される設計は何ですか?

4

1 に答える 1

3

私がこれまでに知っている限りでは、DbContextにバインドされた「実際の」モデルクラスの使用を主張しています。私はあなたと同じ問題を抱えています-「フラット」な独自のDTOオブジェクトを使用する必要があります。Jsonシリアル化は現在、子オブジェクトに親参照(循環参照)を持つデータをシリアル化できません。通常、エンティティツリーは必要ないので、ビューに完全に適合する小さなクラスを作成しました。JsonResultで通常のコントローラーを使用しようとし、データを取得した後、返されたモデルをko.mapping.fromJSに解析しました。それはうまく機能しています。ただし、MVC4で生成されたビューモデルがすでに処理しているすべての優れた機能(ナビゲーションの作成など)に注意する必要があります。たぶん誰かがDTOデータでDbContextを「偽造」する回避策を見つけます。

于 2012-03-23T07:42:25.623 に答える