我在数据库中有一个包含9列的表,如果需要,我希望只能加载它的某些字段。
请问如何使用Entity Framework 4执行此操作?
e.g。我的表格包含以下字段:
ID, FirstName, LastName, FotherName, BirthDate, Mobile, Email
我希望能够只获取这些列:
ID, FirstName, LastName
我的项目是ASP.NET MVC 3
个应用,SQLServer 2008 Express
和EF 4.1
。
答案 0 :(得分:27)
假设您有一个包含此模型的表:
public class User{
public int ID {get; set;}
public string NickName {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public string FotherName {get; set;}
public DateTime BirthDate {get; set;}
public string Mobile {get; set;}
public string Email {get; set;}
public string Password {get; set;}
}
现在,您只想获取ID
,FirstName
,LastName
和FotherName
。你可以用2种方式做到这一点;第一种方法是将它们作为anonymous
对象获取,看看:
var user = entityContext.Users.Where(u => u.ID == id)
.Select(u => new {
ID = u.ID,
FirstName = u.FirstName,
LastName = u.LastName,
FotherName = u.FotherName
}).Single();
现在,您的返回值类型为anonymous
,您可以使用它,例如:
var i = user.ID;
// or
var s = user.FirstName;
以另一种方式(例如,当您希望将>> >> >> >> >> )时,您可以定义一个新的class,(即UserViewModel
),当您选择对象时,将其选为UserViewModel
。看:
public class UserViewModel{
public int ID {get; set;}
public string NickName {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public string FotherName {get; set;}
}
并在查询中,请执行以下操作:
var user = entityContext.Users.Where(u => u.ID == id)
.Select(u => new UserViewModel {
ID = u.ID,
FirstName = u.FirstName,
LastName = u.LastName,
FotherName = u.FotherName
}).Single();
看一下 ONE 之间的差异,在labda表达式中,而不是u => new {}
我们正在使用u => new UserViewModel{}
。祝你好运。
答案 1 :(得分:0)
有很多方法可以完成这项工作,但使用Automapper
NuGet包是我经历过的最简单的方法。
Autmapper
NuGet包。 第二次:制作一个简单的ViewModel
,其中只包含必需的属性:
public class UserViewModel {
public int ID {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
}
第三次:仅在app_start
类中初始化您的映射器一次,如:
namespace SampleProject.App_Start {
public class AutoMapperConfig {
public static void Initializer() {
AutoMapper.Mapper.Initialize(cfg => {
cfg.CreateMap<User, UserViewModel>()
});
}
}
}
第四:在Global.asax.cs
中添加条目:
namespace SampleProject
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// AutoMapper Initializer
App_Start.AutoMapperConfig.Initializer();
}
}
}
第五:在你喜欢的控制器中使用它:
namespace SampleProject.Controllers
{
public class UsersController : Controller
{
private DataContext db = new DataContext();
public ActionResult Index()(
var model = AutoMapper.Mapper.Map<List<UserViewModel>>(db.User.ToList());
return View(model);
}
}
}
上次:您可以在Models
和ViewModels
之间创建任意数量的地图,方法是在app_start
&#中初始化一次39; s AutoMapperConfig
类,并使用简单的代码行在任意位置使用它们。
如果你搜索它,你也可以找到关于Automapper
的很多帮助。它的主要网站是here。
我是ASP.NET MVC 5
的开发人员。 Automapper
每次都适合我。我无法在MVC 3
或MVC 5
之前检查它。