Вручную создавать классы по уже готовой бд со всеми полями и связями между собой довольно утомительно, особенно если таблиц в БД очень много. В обновленных версиях Visual Studio 2013 с пакетами обновления SP3 мы можем автоматизировать этот процесс.
Для этого добавим в проект новый элемент ADO.NET Entity Data Model:
Нажмем OK и нам откроется мастер создания модели. Здесь нам надо выбрать пункт Code First from database:
Далее на следующем шаге настройки модели надо будет установить подключение к имеющейся базе данных.
Нажмем на кнопку New Connection и в следующем окне настроек подключения выберем сервер и базу данных, с которой мы хотим работать:
После этого в окне мастера настройки модели появится выбранное подключение. И также здесь мы можем установить название подключения, которое будет использоваться в файле конфигурации App.config. Изменим его, например, на UserContext:
Нажмем Next, и на следующем шаге нам будет предложено выбрать те таблицы из бд, по которым нам надо создать модели:
И затем нажмем Finish. После этого будут сгенерированы классы моделей. Например, в моем случае по единственной таблице в бд будет сгенерирован следующий класс:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
namespace AutoCodeSecond { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.Spatial; public partial class User { public int Id { get; set; } [Required] [StringLength(50)] public string Name { get; set; } public int Age { get; set; } } } |
И также надо отметить, что в файле App.config появилось определение подключения:
1 2 3 4 5 |
<connectionStrings> <add name="UserContext" connectionString="data source=(localdb)\v11.0;initial catalog=userstoredb; integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> </connectionStrings> |
Для полноценной работы нам осталось добавить класс контекста данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using System; using System.Collections.Generic; using System.Data.Entity; namespace AutoCodeSecond { class UserContext : DbContext { public UserContext():base("UserContext") { } public DbSet<User> Users { get; set; } } } |
И теперь мы можем взаимодействовать с базой данных:
1 2 3 4 5 |
using(UserContext db = new UserContext()) { foreach (User u in db.Users) Console.WriteLine("{0}.{1} - {2}", u.Id, u.Name, u.Age); } |