0


0

Linqオブジェクトを使用してMVC 2のビューを検証する方法

Linqと厳密に型指定されたビューを正しい方法で使用したいと思います。 現時点では、私は次のことをしています:

モデルを作成してagianstを検証します:

public class Menu
    {
        public int Id { get; private set; }
        public string Text { get; private set; }
        public string Action { get; private set; }
        public string Controller { get; private set; }
        public string Parameter { get; private set; }
        public string Langue { get; private set; }

        public Menu(int id, string controller, string action, string parameter, string text)
        {
            Id = id;
            Controller = controller;
            Action = action;
            Text = text;
            Parameter = parameter;
        }
  • Linqを使用して、データベースからモデルにデータを取得します*

public static List GetTabListForMenu(string langue)
{
    Page_dbEntities entity = new Page_dbEntities();


   var tabList = (from ml in entity.wpmenulangue
                   where ml.Langue == langue
                   from m in entity.wpmenu
                   where ml.Menu == m.Id
                   from l in entity.wplangue
                   where ml.Langue == l.Langue
                   from p in entity.wppage
                   where p.Id == m.Page
                   select new { m.Id, p.Controller, p.Action, p.Parameter, ml.Text}).ToList();

    List menu = new List();
    foreach (var item in tabList)
    {
        menu.Add(new Menu(item.Id, item.Controller, item.Action, item.Parameter, item.Text));
    }
    return menu;
}

これは最適な方法ではないと確信しており、2つの質問があります。

  1. データベースからデータを取得するとき、最初に変数を使用してから foreachでオブジェクトに移動します。 これは私の時間の無駄であり、SQLで取得するよりも効率が悪いようです。

  2. エンティティモデルを検証するだけでいいと言われました。 ビューで複数のエンティティを使用している場合でも。 これは本当ですか? (私たちにこれを機能させることができず、私はそれについて何もオンラインで見つけることができなかったと言っている人)。

次の数時間でこの投稿を振り返ろうとしますが、24時間待たなければならない場合があります。

1 Answer


1


public static List GetTabListForMenu(string langue)
{
    Page_dbEntities entity = new Page_dbEntities();
    return (from ml in entity.wpmenulangue
            where ml.Langue == langue
            from m in entity.wpmenu
            where ml.Menu == m.Id
            from l in entity.wplangue
            where ml.Langue == l.Langue
            from p in entity.wppage
            where p.Id == m.Page
            select new Menu(m.Id, p.Controller, p.Action, p.Parameter, ml.Text)
    ).ToList();
}

検証に関しては、ビューで複数のエンティティを使用しないでください。 ViewModelと呼ばれる単一のエンティティを使用する必要があります。 このViewModelは、ビュー上のデータを表すクラスです。 検証にhttp://www.asp.net/mvc/tutorials/mvc-music-store-part-5[DataAnnotations]を使用している場合、検証方法を示す属性でこのビューモデルプロパティを修飾できます。