我首先使用MVC 4,EF 5代码,我的服务层只与域类(POCO)交互,我的UI层与ViewModel类(POCO)交互。
我的问题:
如何从UI指定必填字段,并仅从服务层中的数据库中获取这些字段?
答案 0 :(得分:1)
动态构建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
是一个类似字典的结构,您可以从中选择要显示的值。
答案 1 :(得分:0)
This是MVC的练习。 更好的是使用viewmodel 您可以使用viewmodel和requird list.for示例这是视图模型,您应该将此模型传递给视图
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);
}