Связь 1 ко многим Entity Framework
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы с вами разбирали связь 1 к 1 в Entity Framework. В данной статье я бы хотел на том же самом примере разобрать связь 1 ко многим в Entity Framework. В одном заказе может быть несколько продуктов.
Скачать проект полностью можно по ссылке.
Изменим класс Order:
using System.Collections.Generic; namespace TestProject { class Order { // id заказа public int Id { get; set; } // количество товара public int Quantity { get; set; } // заказчик public string Customer { get; set; } // Коллекция продуктов public ICollection<Product> Product { get; set; } } }
Класс Product:
public class Product { public int Id { get; set; } public string Name { get; set; } public int Price { get; set; } public int? OrderId { get; set; } public Order Order { get; set; } }
Отредактируем файл App.config, изменив название базы данных:
<connectionStrings> <add name="OneToManyEF" connectionString="data source=(LocalDb)\v11.0;initial catalog=OneToManyEF;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> </connectionStrings>
Добавим файл контекста OneToManyEF:
namespace TestProject { class OneToManyEF: DbContext { public OneToManyEF(): base("name=OneToManyEF") { } public virtual DbSet<Product> Products { get; set; } public virtual DbSet<Order> Orders { get; set; } } }
Файл Program.cs:
using System; using System.Linq; using System.Data.Entity; using System.Collections.Generic; namespace TestProject { class Program { static void Main(string[] args) { Database.SetInitializer(new DropCreateDatabaseAlways<OneToManyEF>()); using (OneToManyEF db = new OneToManyEF()) { // Создаём 4 продукта Product book1 = new Product { Name = "C# Book", Price = 1500 }; Product book2 = new Product { Name = "Java Book", Price = 1800 }; Product book3 = new Product { Name = "PHP Book", Price = 1000 }; Product book4 = new Product { Name = "Javascript Book", Price = 1200 }; // Добавляем продукты в таблицу. db.Products.AddRange(new List<Product> { book1, book2, book3, book4 }); // Сохраняем продукты в базе данных db.SaveChanges(); //Создаём 2 заказа Order order1 = new Order { Customer = "Alex", Product = new List<Product> { book1, book2 } }; Order order2 = new Order { Customer = "Ivan", Product = new List<Product> { book3, book4 } }; // Добавляем заказы в таблицу. db.Orders.AddRange(new List<Order> { order1, order2 }); db.SaveChanges(); //Выбираем из БД все наши заказы var orders = db.Orders.ToList(); //Выводим их в консоль foreach (Order order in orders) { Console.WriteLine("Заказчик {0} приобрел следующие товары: ", order.Customer); int sum = 0; foreach (Product product in order.Product) { Console.WriteLine("{0}, цена: {1}", product.Name, product.Price); sum += product.Price; } Console.WriteLine("Всего заказов на сумму {0} руб.", sum); // Отступ между заказами Console.WriteLine("---------------------"); } } Console.WriteLine("Нажмите клавишу для продолжения..."); Console.ReadLine(); } } }
Таким образом мы видим, что заказ может включать несколько книг, однако одна книга не может находиться в нескольких заказах. Данный пример связи (многие ко многим) мы разберем в следующей статье.
В данной статье вы познакомились со связью 1 ко многим в Entity Framework.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.