/ / Molte a molte relazioni in EF Core - .net, entity-framework, asp.net-core, entity-framework-core, crud

Molte a molte relazioni in EF Core - .net, entity-framework, asp.net-core, entity-framework-core, crud

Ho due entità con molte e molte relazioni nel mio progetto .NET Core:

Libro:

public class Book
{
[Key]
public int BookId { get; set; }
public string Name { get; set; }
public string AuthorName { get; set; }
public int YearOfPublishing { get; set; }
public LibraryType Type { get; set; }

public virtual ICollection<BookPublicHouse> PublicHouses { get; set; }

public Book()
{
PublicHouses = new Collection<BookPublicHouse>();
}

}

Casa della pubblicazione:

public class PublicHouse
{
[Key]
public int PublicHouseId { get; set; }
public string PublicHouseName { get; set; }
public string Country { get; set; }
public virtual ICollection<BookPublicHouse> Books { get; set; }

public PublicHouse()
{
Books = new Collection<BookPublicHouse>();
}
}

E creo il tavolo dei join:

 public class BookPublicHouse
{
public virtual Book Book { get; set; }
public virtual PublicHouse PublicHouse { get; set; }
public int BookId { get; set; }
public int PublicHouseId { get; set; }
}

Ecco la classe di contesto:

public class LibraryContext : DbContext
{
public LibraryContext(DbContextOptions<LibraryContext> options)
: base(options)
{ }

public virtual DbSet<Book> Books { get; set; }
public virtual DbSet<PublicHouse> PublicHouses { get; set; }


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<BookPublicHouse>()
.HasKey(bp => new { bp.BookId, bp.PublicHouseId });

}
}

Quindi dopo ho bisogno di creare Api "s con le operazioni CRUD, ma non so come crearlo. Non so come ottenere il libro include tutte le publichouses, che questo libro contiene

[Route("api/books")]
public class BookController : Controller
{
private LibraryContext _dbContext;


public BookController(LibraryContext context)
{
_dbContext = context;
this.mapper = mapper;
}
//get()
//get(id)
//create()
//update
//delete

}

risposte:

1 per risposta № 1

Per Entity Framework Nucleo, di solito si usa Include() seguito da ThenInclude Per includere entità "figli di bambini"

var book = _dbContext.Books
.Include(b => b.PublicHouses)
.ThenInclude(bph => bph.PublicHouse)
.FirstOrDefault(b => b.BookId == 1);

(Inoltre, sii consapevole che l'intellisense si inganneràcredendo che questa non sia la sintassi corretta, fino a quando non l'hai scritta completamente, ea volte hai bisogno di lanciare una build di successo prima che smetta di lamentarti)