Как выбрать только некоторые поля из таблицы в EF
у меня есть таблица с 9 столбцами в базе данных, и я хочу иметь возможность загружать только некоторые поля, если мне нужно.
как я могу сделать это с Entity Framework 4, пожалуйста?
например, в моей таблице есть следующие поля:
ID, FirstName, LastName, FotherName, BirthDate, Mobile, Email
и я хочу иметь возможность получать только эти столбцы:
ID, FirstName, LastName
мой проект-это ASP.NET MVC 3
приложения, с SQLServer 2008 Express
и EF 4.1
.
2 ответов
Предположим у вас есть таблица с этой модели:
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 способом; первый способ-получить их как
может быть много способов сделать эту работу, но с помощью Automapper
пакет NuGet-самый простой, который я испытал.
-
первый установка
Autmapper
пакет NuGet для вашего проекта из проводника пакетов 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
' sAutoMapperConfig
класса и использовать их там, где вы хотите с простым строка кода.
также вы можете найти много помощи о Automapper
если вы ищете об этом. Его основной веб-сайт здесь.
важно:
я разработчик ASP.NET MVC 5
. Automapper
отлично работает для меня каждый раз. Я не могу проверить это на MVC 3
или старше MVC 5
.