Как добавить List<T> в строку таблицы базы данных

230
18 июля 2017, 17:11

Допустим, у меня есть класс Book, где содержатся поля Id, Name и Author. И есть класс User, у которого есть поля List<Book> Books и Name.
Как создать такую структуру в БД? Получатся две таблицы: Book и User. Но как добавить в поле List<Book>? Или только создавать новую таблицу с соответствиями?

Answer 1

Делается это очень легко.

1) Создаем сущности:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set;}
    public virtual ICollection<Book> Books { get; set; }
    public User()
    {
        Books = new List<Book>();
    }
}
public class Book
{
    public int Id {get; set;}
    public string Name {get; set;}
}

2) Создаем класс контекста, используя его мы будем взаимодействовать с БД:

public class EfDbContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        // Говорим EF, что сущность User может иметь много Book. 
        modelBuilder.Entity<User>().HasMany(p => p.Books);
    }
}

3) Указываем строку подключения в файле app.config. Обратите внимание, что имя стоки подключения такое же как и у класса контекста, в этом случае EF автоматически обнаружит строку и станет ее использовать:

<connectionStrings>
    <add name="EfDbContext" connectionString="Data Source=.; Initial Catalog=MyDataBase; Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

4) Используем:

static void Main(string[] args)
{
    var context = new EfDbContext();
    // Создаем сущности.
    var book = new Book() 
    {
        Name = "Война и Мир"
    };
    var user = new User()
    {
        Name = "Вася",
        Age = 15
    };
    // Добавляем книгу пользователю.
    user.Books.Add(book);
    // Добавлеям пользователя в контекст.
    context.Set<User>().Add(user);
    // Сохраняем изменения.
    context.SaveChanges();
    Console.ReadKey();
}