Отношение один ко многим в ядре EF

#asp.net-core #entity-framework-core

#asp.net-core #сущность-фреймворк-ядро

Вопрос:

Я пытался изучать Entity Framework при изучении .net core mvc, мне нравится понимать, что лучше всего использовать для создания отношений «один ко многим»:

Вот 2 модели:

     public class BookCategory
    {
        [Key]
        public int IdCategory { get; set; }
        [Required]
        public string Description { get; set; }

    }

 public class Book
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public string Author { get; set; }
        public string ISBN { get; set; }
        public int IdCategory { get; set; }
        public BookCategory BookCategory { get; set; }

    }


        // dBContext
        public DbSet<Book> Books { get; set; }
        public DbSet<BookCategory> BookCategories { get; set; }
 

Я не уверен, что это лучший способ создать отношение в mvc, потому что после вызова update-database я вижу поле «BookCategoryIdCategory» в таблице «book», и я не думаю, что это правильно.

Не могли бы вы мне помочь, пожалуйста?

Обновление: я забыл объяснить лучше:

В моей базе данных после обновления-база данных, которую я хотел бы видеть:

 (table book)

    int Id (primary key)
    string Name 
    string Author
    string ISBN
    int IdCategory (relation with IdCategory of BookCategory

(table bookcategory)

int IdCategory (primary key relation with IdCategory of book)
string Description
 

и, по возможности, никаких других полей.

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

1. Это вопрос EF, а не ASP.NET вопрос: Entity Framework не имеет ничего общего с ASP.NET MVC или ASP.NET Ядро. Я отредактировал ваш вопрос.

2. На этой странице объясняется, что вам нужно сделать: learnentityframeworkcore.com/configuration /… — вам нужно добавить ICollection<Book> свойство BookCategory и настроить связь внутри OnModelCreating .

3. Я не думаю, что это может быть что-то иное, кроме отношения «многие ко многим».

4. Дай, спасибо за твой ответ, в твоей ссылке нет поля «IDCompany» или аналогичного поля. Мои вопросы таковы: является ли ваша ссылка лучшим способом? А если мне нужно использовать «IDCompany»? Другие предлагают «список». Почему этот способ лучше других?

5. Привет @user3449922, Мой ответ помог вам решить вашу проблему? Если да, не могли бы вы, пожалуйста, принять это как ответ? Если нет, не могли бы вы, пожалуйста, следить за тем, чтобы дать мне знать? См. раздел: Как принять в качестве ответа . Спасибо.

Ответ №1:

Для вашего сценария вы могли бы использовать ForeignKey атрибут. ForeignKey Атрибут используется для указания, какое свойство является внешним ключом в отношении:

 public class Book
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string Author { get; set; }
    public string ISBN { get; set; }
    public int IdCategory { get; set; }
    [ForeignKey("IdCategory")]         //add this...
    public BookCategory BookCategory { get; set; }
}
public class BookCategory
{
    [Key]
    public int IdCategory { get; set; }
    [Required]
    public string Description { get; set; }
}
 

Ответ №2:

Если в книжной категории может быть много книг, то можно сказать, что у нее есть список книг.

В вашем классе категории книг добавьте:

 public List<Book> Books { get; set; }