Как определить отношения в ef core 3?

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

#entity-framework #.net-ядро #asp.net-core-webapi

Вопрос:

я новичок в .net core и ef, и я хотел бы получить некоторую помощь по поводу небольшого проекта, который я делаю (.Net Core WebAPI)

Чтобы уточнить, что я делаю, вот диаграмма:

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

И вот код, который я написал как классы моделей: введите описание изображения здесь

Правильно ли весь этот код представляет то, что я пытался сделать? Должен ли я сначала объявлять реквизиты, такие как идентификатор, а затем реквизит другого типа класса с аннотацией [ForeignKey]? Также, например, если я хочу выполнить post-запрос с информацией о символе, должен ли я отправлять json таким образом?:

 {
    "Name":"Lost Vayne Meliodas",
    "Awaken":6,
    "Level":80,
    "AttributeId":1,
    "RarityId":4
}
  

Спасибо!

Ответ №1:

Вы должны использовать FluentAPI.

В вашем классе dbcontext у вас должно быть 3 набора баз данных следующим образом

 public DbSet<Character> Character { get; set; }
    public DbSet<Rarity> Rarity { get; set; }
    public DbSet<Attribute> Attribute { get; set; }
    
    //You need to have a OnModelCreating method in the same dbcontext class

protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                
                base.OnModelCreating(modelBuilder);
                 modelBuilder.Entity<Rarity>()
                     .HasMany(c => c.Characters)
                     .WithOne(e => e.Rarity);
               modelBuilder.Entity<Attribute>()
                     .HasMany(c => c.Characters)
                     .WithOne(e => e.Attribute);
    
    }
  

Добавьте это в свою таблицу редкостей

 public ICollection<Character> Characters { get; set; }
  

Добавьте это в свою таблицу атрибутов

 public ICollection<Character> Characters { get; set; }
  

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

1. Спасибо за совет! Также лучше использовать FluentAPI, чем аннотации данных? Кроме того, почему я должен добавлять эту коллекцию к атрибутам и редкостям? не лучше ли получить их через символы?