/ / Wiele do wielu relacji w rdzeniu EF - .net, encja-framework, asp.net-core, encja-framework-core, crud

Wiele do wielu relacji w rdzeniu EF - .net, encja-framework, asp.net-core, entity-framework-core, crud

Mam dwie jednostki o wielu do wielu relacjach w moim projekcie .NET Core:

Książka:

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>();
}

}

Dom publikacji:

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>();
}
}

I tworzę tabelę dołączeń:

 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; }
}

Oto klasa kontekstu:

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 });

}
}

Następnie muszę utworzyć Api z operacjami CRUD, ale nie wiem, jak to zrobić. Nie wiem, jak zdobyć książkę, to wszystkie PublicHouses, które zawiera ta książka

[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

}

Odpowiedzi:

1 dla odpowiedzi № 1

Dla Entity Framework Rdzeń, zwykle używa się Include() śledzony przez ThenInclude Uwzględnienie podmiotów "dzieci dzieci"

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

(należy również pamiętać, że intellisense wpadnie wuważając, że nie jest to poprawna składnia, dopóki nie napisałeś jej kompletnie, a czasami musisz uruchomić udaną kompilację, zanim przestanie narzekać)