Как изменить тип столбца в БД через EF Core?

Имеются 2 сущности:

public class AnimalBreead : BaseEntity
{
    public string Name { get; set; }

    public AnimalType AnimalType { get; set; }
}

public class AnimalEntity:BaseEntity
{
    public string Name { get; set; }
    
    public AnimalType AnimalType { get; set; }

    public virtual AnimalBreead AnimalBreead { get; set; }
}

В таблицу Animals почему-то добавляется AnimalBreeadId, я рассчитывал, что там будет AnimalBreeadName.

public class DataContext : DbContext
{
    public DbSet<AnimalEntity> Animals { get; set; }

    public DbSet<AnimalBreead> AnimalBreeads { get; set; }

    public DataContext(DbContextOptions<DataContext> options) : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AnimalBreead>().Property(e => e.AnimalType)
            .HasConversion(
            x => x.ToString(),
            v => (AnimalType)Enum.Parse(typeof(AnimalType), v));


    }
}

введите сюда описание изображения

Как мне организовать добавление Animal в таблицу Animals? Со связями ещё не работал. Прошу для примера)


Ответы (1 шт):

Автор решения: Blackmeser

AnimalBreead и AnimalEntity - это разные сущности и связаны они могут быть через foreign key. Entity Framework сам его заводит, т.к. вы этого не делаете, на основании связи public virtual AnimalBreead AnimalBreead { get; set; }
Если вы хотите в AnimalEntity видеть Name от связанного AnimalBreead, то вам нужно в AnimalEntity добавить свойство:

public class AnimalEntity : BaseEntity
{
...
   [NotMapped] //указывает что это свойство не является частью таблицы AnimalEntity
   public virtual string AnimalBreeadName => AnimalBreead?.Name;
}

Соответственно при загрузке AnimalEntity вам нужно делать Include(t => t.AnimalBreead) чтобы получить это свойство.

→ Ссылка