Связь 1 к 1 Entity Framework

Связь 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.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *