首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架将嵌套的对象作为单独的文档插入Cosmos Db

实体框架将嵌套的对象作为单独的文档插入Cosmos Db
EN

Stack Overflow用户
提问于 2021-09-23 16:45:15
回答 2查看 158关注 0票数 0

我使用EF从Cosmos DB中插入和检索对象。然而,我的对象及其嵌套子对象将作为单独的文档保存到cosmos中,而不是同时保存在同一个文档中。

我有以下对象

代码语言:javascript
运行
复制
public class Author
    {
        public Guid AuthorId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime BirthDate { get; set; }
        public List<Book> Books { get; set; }
    }

public class Book
    {
        public Guid BookId { get; set; }
        public string Title { get; set; }
        public Author Author { get; set; }
    }

和下面的DbContext

代码语言:javascript
运行
复制
public class BookStoreDbContext:DbContext
    {
        private static readonly string EndpointUri = ConfigurationManager.AppSettings["EndPointUri"];
        private static readonly string PrimaryKey = ConfigurationManager.AppSettings["PrimaryKey"];
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
        optionsBuilder.UseCosmos(
                EndpointUri,
                PrimaryKey,
                databaseName: "BookStoreDb");
        }

        public DbSet<Author> Authors { get; set; }
        public DbSet<Book> Books { get; set; }
    }

这是用于插入数据的代码

代码语言:javascript
运行
复制
using (var context = new BookStoreDbContext())
            {
                context.Database.EnsureCreated();

                var authors = new List<Author>
                {
                    new Author
                    {
                        AuthorId = Guid.NewGuid(),
                        FirstName ="Meredith",
                        LastName ="Alonso",
                        BirthDate = DateTime.Parse("1970-09-01"),
                        Books = new List<Book>()
                        {
                            new Book { BookId=Guid.NewGuid(), Title = "Introduction to Microeconomics"}
                        }
                    }
                };

                context.Authors.AddRange(authors);
                context.SaveChanges();
            }

然后,我将一个Author对象和一个Book对象保存到db中,而不是包含嵌套的Book对象的Author对象。

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2021-09-24 12:21:05

如果想要嵌套对象,则需要使用owned entities

代码语言:javascript
运行
复制
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    modelBuilder.Entity<Author>().OwnsOne(a => a.Book);
}
票数 1
EN

Stack Overflow用户

发布于 2021-09-24 08:29:26

我已经意识到我对EF如何与宇宙合作的理解是缺乏的。

EF拆分对象并将它们保存为单独的文档,尽管它们是父对象的子对象。

因此,对象被拆分的事实并不是bug,而是EF处理宇宙的方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69303956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档