Связь 1 к 1 Entity Framework
Всем доброго времени суток. На связи Алексей Гулынин. В данной статье я бы хотел рассказать про связь 1 к 1 в Entity Framework. Создадим пустой проект и сразу через менеджер пакетовNuGet добавим в проект Entity Framework, как мы это делали в прошлых статьях. Будем использовать подход Code First.
Скачать проект полностью можно по ссылке.
В App.config добавим следующую строку подключения к базе данных:
<connectionStrings> <add name="OneToOneEF" connectionString="data source=(LocalDb)\v11.0;initial catalog=OneToOneEF;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> </connectionStrings>
Наша база данных будет называться OneToOneEF и создастся автоматически, как только мы запустим проект. Создадим 2 класса: Product и Order. В классе Product будем хранить продукты, в классе Order — заказы. В одном заказе у нас может быть только один продукт (это и будет реализация связи 1 к 1).
Класс Product:
namespace TestProject { class Product { // id продукта public int Id { get; set; } // наименование продукта public string Name { get; set; } // цена продукта public int Price { get; set; } } }
Класс Order:
namespace TestProject { class Order { // id заказа public int Id { get; set; } // количество товара public int Quantity { get; set; } // заказчик public string Customer { get; set; } // id продукта public int? ProductId { get; set; } // сам продукт public Product Product { get; set; } } }
Создадим класс OneToOneEF, в контексте которого и будем работать с базой данных:
using System.Data.Entity; namespace TestProject { // Наследуемся от DbContext class OneToOneEF: DbContext { // указываем имя подключения из App.config public OneToOneEF(): base("name=OneToOneEF") { } public virtual DbSet<Product> Products { get; set; } public virtual DbSet<Order> Orders { get; set; } } }
Создадим пару продуктов и пару заказов, и выведем их в консоль:
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<OneToOneEF>()); using (OneToOneEF db = new OneToOneEF()) { // Создаём три продукта 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 }; // Добавляем продукты в таблицу. db.Products.AddRange(new List<Product> { book1, book2, book3 }); // Сохраняем данные в базе данных db.SaveChanges(); //Создаём 3 заказа Order order1 = new Order { Customer = "Alex", Quantity = 1, Product = book1 }; Order order2 = new Order { Customer = "Alex", Quantity = 1, Product = book3 }; Order order3 = new Order { Customer = "Ivan", Quantity = 1, Product = book2 }; db.Orders.AddRange(new List<Order> { order1, order2, order3 }); db.SaveChanges(); //Выбираем из БД все наши заказы var orders = db.Orders.ToList(); //Выводим их в консоль Console.WriteLine("Покупатель\tТовар\tЦена\tКоличество"); foreach (Order order in orders) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", order.Customer, order.Product.Name, order.Product.Price, order.Quantity); } } Console.WriteLine("Нажмите клавишу для продолжения..."); Console.ReadLine(); } } }
В данной статье мы познакомились со связью 1 к 1 в Entity Framework.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.