Реальная сделка

Добро пожаловать в эту статью. Сегодня мы будем изучать модель отношений один ко многим. Если вы здесь только для этого сегмента и для того, чтобы понять, как работает эта основная модель, эта статья будет вам полезна.

Однако, если вы хотите протестировать все, что описано в статье, на своей собственной машине, убедитесь, что вы следовали серии статей с самого начала. В основном, самый важный, где мы собственно строим классы.



.NET 7 && Entity Framework 7 с отношениями SQL Server-1:1
Где все становится РЕАЛЬНЫМ!medium.com



Ты меня знаешь, я не люблю терять время. Так что поместите свою добычу в удобное положение и давайте приступим!

1:N

Как мы можем достичь таких отношений, используя .NET и EntityFramework? Хорошо, давайте сначала определим такое отношение. В предыдущих статьях у нас были Character и Backpack, где один персонаж мог держать только один рюкзак.

Теперь мне нужно сначала определить сущность, которых у персонажа может быть много. Я назову эту сущность Weapon только для того, чтобы поддержать тему RPG.

namespace WebApplication2.Data.Models
{
    public class Weapon
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int CharacterId { get; set; }
        public Character Character { get; set; }
    }
}

В папку Models я добавил объект Weapon. Что делает оружейная сущность? Что ж, у него есть некоторые данные, и оружие принадлежит только одному персонажу! Вот почему у меня есть вот это CharacterId и это Character внизу.

Конечно, наш Character должен быть в состоянии получить все оружие. Давайте перейдем к следующему Character.

namespace WebApplication2.Data.Models
{
    public class Character
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public Backpack Backpack { get; set; }
        public List<Weapon> Weapons { get; set; }
    }
}

Единственное обновление здесь — в строке восемь, где я добавляю List<Weapon> под названием «Оружие». Что я здесь утверждаю?

Ну, у моего Character есть список, что означает, что он может иметь несколько видов оружия. Таким образом, EntityFramework знает, что ему необходимо создать следующую связь. Один ко многим. Одиночный Characterимеет много оружия из-за списка, а одиночный Weaponпринадлежит только одному Character, потому что у него нет списка, а просто ссылка на Character.

Боже, я надеюсь, что это не запутало. Если было, прочтите еще раз. Вы справитесь с этим, поверьте мне.

Обновить контекст данных

Теперь нам нужно обновить DataContext, добавив новый файл DbSet. Мы делаем это, чтобы сообщить EntityFramework о нашей новой сущности.

using Microsoft.EntityFrameworkCore;
using WebApplication2.Data.Models;

namespace WebApplication2.Data
{
    public class DataContext : DbContext
    {
        public DataContext(DbContextOptions<DataContext> options) : base(options) { }

        public DbSet<Character> Characters{ get; set; }
        public DbSet<Backpack> Backpacks { get; set; }
        public DbSet<Weapon> Weapons { get; set; }
    }
}

Мы сделали. Вот и все, дамы и господа. Как вы думаете, какая заключительная часть?

У нас все сделано в разделе кода. Теперь нам нужно внести изменения в SQL, и мы делаем это с помощью миграций, как вы, вероятно, помните из предыдущих статей.

Команда: «миграции dotnet ef add [имя]».

Это приведет к миграции с выбранным вами соглашением об именах.

Так как теперь у нас есть миграция в папке Migrations, осталось обновить базу данных.

Команда: «обновление базы данных dotnet ef».

Сделанный! Нам осталось проверить результат. Мы сделаем это в следующей статье, но не стесняйтесь подключаться к SSMS и экспериментировать.

Спасибо, что были со мной, увидимся в следующей статье. Пока!