Извлечение дочерних документов из Cosmos Db с помощью Entity Framework

#c# #entity-framework-core #azure-cosmosdb

Вопрос:

У меня есть объект «Автор», и в нем есть список книг в качестве дочерних объектов, как показано ниже

 public class Author
    {
        public Guid AuthorId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime BirthDate { get; set; }
        public ICollection<Book> Books { get; set; } = new HashSet<Book>();
    }
 

Это хранится в CosmosDB в виде двух отдельных документов (так, по-видимому, EF пишет в Cosmos).

Однако, если я сделаю следующее

 using (var context = new BookStoreDbContext())
            {
                var list = context.Authors;

                foreach (var author in list)
                {
                    Console.WriteLine(author.FirstName   " "   author.LastName);

                    foreach (var book in author.Books)
                    {
                        Console.WriteLine("t"   book.Title);
                    }
                }
            }
 

Коллекция книг пуста…

Как мне заставить его вернуть книги?

Ответ №1:

Я нашел проблему. Мне нужно было добавить следующий код в BookStoreDbContext

 protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Account>().OwnsMany(t => t.AccountUsers);
        }