EF Core - EntityTypeBuilder Отношение один ко многим? - PullRequest
0 голосов
/ 24 мая 2018

Я немного запутался по поводу того, как делать отношения в EF Core 2.1.Я делаю это бегло.

У меня есть

public class Employee : IdentityUser
{
    public int BranchId { get; set; }
    public Branch Branch { get; set; }

}

 public class Branch
    {
        public int Id { get; set; }
        public int CompanyId { get; set; }
        public Company Company { get; set; }

        public ICollection<Employee> Employees { get; set; }
    }

public class EmployeerConfig : IEntityTypeConfiguration<Employee>
{
    public void Configure(EntityTypeBuilder<Employee> builder)
    {
        builder.ToTable("Employees");
    }
}

public class BranchConfig : IEntityTypeConfiguration<Branch>
    {
        public void Configure(EntityTypeBuilder<Branch> builder)
        {
            builder.HasKey(x => x.Id);
            builder.Property(x => x.Id).ValueGeneratedOnAdd();

            builder.HasMany(x => x.Employees);

            builder.ToTable("Branches");
        }
    }

Все примеры, которые я видел в основном, использовали построитель моделей dbcontext, но этот способ больше не нужен, так как теперь вы можете использовать splitэто как я сделал.

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

Это заставило меня добавить builder.HasMany(x => x.Employees) в конфигурацию ветки, и теперь связь работает, однако я не уверен, что мне нужно указать что-то в области Сотрудника, чтобы выполнить?

Iтакже не знаю, нужно ли мне еще добавлять виртуальные в мои коллекции и почему, если я не использую ToTable () и не собираю свою базу данных, все имена таблиц сокращаются, я подумал, что это автоматически.

1 Ответ

0 голосов
/ 31 июля 2019

EmployeerConfig в порядке, вы можете добавить ключ, если хотите yoy

Для Branch Config добавьте эту строку, надеюсь, это поможет вам.

     builder.HasMany(x => x.Employee).WithOne(b => b.Branch).HasForeignKey(b => b.BranchId)
    .OnDelete(DeleteBehavior.Cascade);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...