Dapper - creating objects with queries on database with one-to-many and many-to-many relationships

I have an Sqlite database, for a which a partial schema is: enter image description here

In the code, classes representing the data are as follows (simplified):

public Book : Item
{
    public ICollection<Tag> Tags { get; set; }
    public ICollection<Author> Authors { get; set; }
    public Publisher publisher { get; set; }
    // other properties...
}

public class Publisher
{
    public ICollection<Book> Books { get; set; }
    // other properties...
}

public class Author
{
    public ICollection<Author> Authors { get; set; }
}

public class Tag
{
    public ICollection<Item> Items { get; set; }
}

I need to return an IEnumerable<Book>, with the Book objects containing all Author, Publisher and Tag data for each Book. Currently, I have the following code, which solves the problem of getting publisher data:

public IEnumerable<Book> GetAllBooks()
{
    using (var db = new SqliteConnection(connectionString)
    {
        var sql = "SELECT * FROM Books as B " +
                  "INNER JOIN Publishers AS P On B.publisherId = P.id;";
        var allBooks = db.Query<Book, Publisher, Book>(sql, (book, publisher) =>
        {
             book.publisher = publisher;
             return book;
        });
        return allBooks;
    }
}

How to get the remaining data for a Book (ie Author and Tag data with the many-to-many relationships as seen in the schema)?