最初に MVC 4、EF 5 コードを使用します。サービス レイヤーはドメイン クラス (POCO) のみと対話し、UI レイヤーは ViewModel クラス (POCO) と対話します。
私の質問:
UI から必須フィールドを指定し、これらのフィールドのみをサービス層のデータベースから取得するにはどうすればよいですか?
最初に MVC 4、EF 5 コードを使用します。サービス レイヤーはドメイン クラス (POCO) のみと対話し、UI レイヤーは ViewModel クラス (POCO) と対話します。
私の質問:
UI から必須フィールドを指定し、これらのフィールドのみをサービス層のデータベースから取得するにはどうすればよいですか?
Select
結果を取得する型 (名前付きまたは匿名) はコンパイル時にわからないため、動的に式を作成するのは簡単ではありません。ここStackOverflowでいくつかの努力を見てきましたが、私の記憶が正しければ、それらは無益でした(現時点では見つけられません)。
できることは、Entity Sqlを使用してクエリ文字列を作成することです。
var queryString = string.Format("SELECT {0} FROM MyTable"
, string.Join(",",fieldsFromUi); // WHERE...?
var q = new ObjectQuery<DbDataRecord>(queryString , context);
はインスタンスですcontext
。表示する値を選択できる辞書のような構造です。ObjectContext
DbDataRecord
これは MVC の賭けの練習です。より良いのはviewmodelを使用することです。viewmodelとrequiry listを使用できます。たとえば、これはビューモデルであり、このモデルをビューに渡す必要があります
public class LoginPageVM
{
[Required(ErrorMessage = "Are you really trying to login without entering username?")]
[DisplayName("Username/e-mail")]
public string UserName { get; set; }
[Required(ErrorMessage = "Please enter password:)")]
[DisplayName("Password")]
public string Password { get; set; }
[DisplayName("Stay logged in when browser is closed")]
public bool RememberMe { get; set; }
}
ビューで
@model CamelTrap.Models.ViewModels.LoginPageVM
@using (Html.BeginForm()) {
@Html.EditorFor(m => m);
<input type="submit" value="Save" class="submit" />
}
そしてコントローラーで
[HttpGet]
public ActionResult LoginPage()
{
return View();
}
[HttpPost]
public ActionResult LoginPage(LoginPageVM model)
{
...code to login user to application...
return View(model);
}