Сомнения в отношении EF Core 2.1 Relations - PullRequest
1 голос
/ 27 марта 2020

Я работаю над подходом Entity Framework Core Code First и ASP. Net Core 2.1, создающим 3 таблицы:

  1. Класс Person
public class Person
{
        public string Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public PeopleProfessions PeopleProfessions { get; set; }
}
Класс профессий
public class Profession
{
        public string Id { get; set; }

        public string Name{ get; set; }

        public PeopleProfessions PeopleProfessions { get; set; }
}
класс людей профессий
public class peopleprofessions
{
        [ForeignKey("PersonId ")]
        public string PersonId { get; set; }
        public ICollection<Person> People { get; set; }

        [ForeignKey("ProfessionId")]
        public string ProfessionId{ get; set; }
        public ICollection<Profession> Professions { get; set; }
}

В моем контексте:

protected override void OnModelCreating(ModelBuilder builder)
{
     base.OnModelCreating(builder);

     builder.Entity<peopleprofessions>().HasKey(up => new { up.PersonId, up.ProfessionId });
}

Учитывая это:

  • Люди могут иметь несколько профессий ,
  • Таблица профессий предназначена только для чтения хранимых данных, таких как «Бухгалтер».

У меня есть сомнения относительно того, как я могу сделать таблицу 3, содержащую только иностранцев, и что она может удовлетворить потребности что я только что упомянул.

Я попытался сделать отношения соответствующим образом, но я также заметил, что в таблицах 1 и 2 он запрашивает оба идентификатора профессии людей таблицы.

Я не знаю если я потерялся, или я смотрю неправильно, или есть альтернатива этой ситуации. Спасибо за любую помощь, вы можете дать мне.

1 Ответ

1 голос
/ 27 марта 2020

Вы можете использовать Коллекции в элементах навигации немного назад. Для ваших основных сущностей (Персона и Профессия) у них должны быть коллекции, так как это один ко многим. Но для PeopleProfessions каждая запись представляет собой отдельную ссылку на указанную c сущность, поэтому в коллекции нет только прямой ссылки на объект.

public class Person
{
        public string Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public ICollection<PeopleProfessions> PeopleProfessions { get; set; }
}

public class Profession
{
        public string Id { get; set; }

        public string Name{ get; set; }

        public ICollection<PeopleProfessions> PeopleProfessions { get; set; }
}

public class PeopleProfessions
{
        public string PersonId { get; set; }
        public Person Person { get; set; }

        public string ProfessionId { get; set; }
        public Profession Profession { get; set; }
}

Можно, но не нужно указывать ForeignKey атрибут, потому что вы следуете правилам именования EFs (он выяснит это для вас). Ваш OnModelCreating выглядит правильно для составного ключа.

Возможно, вы захотите удалить множественное число из PeopleProfessions (просто вызовите класс PeopleProfession), поскольку один экземпляр представляет одно отношение People-Profession. Обычно я делаю это, но имя навигации в сущностях остается множественным, поскольку оно может представлять более одного, то есть

public ICollection<PeopleProfession> PeopleProfessions { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...