【发布时间】:2019-06-08 08:48:40
【问题描述】:
我正在尝试保存一个实体,但该实体与另一个实体相关,而在这个实体中,我只有 id。例如,给出这个结构:
public class Library
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Book> Books { get; set; }
}
public class Book
{
public int Id { get; set; }
public int LibraryId { get; set; }
public string Title { get; set; }
public Bookshelf Bookshelf { get; set; }
}
public class Bookshelf
{
public int Id { get; set; }
public string Color { get; set; }
}
我从客户那里收到一本要保存到数据库的新书。这本书只包含Title、LibraryId 和BookshelfId(它是一个 DTO)。
现在我想保存这本书,创建与图书馆和书架的关系,而不检索完整的对象Library 和Bookshelf,如何轻松做到?
例如,如果我想创建一个新图书馆,并将其与一些已经存在的书籍相关联,该怎么办?我应该怎么做才能实现它?
【问题讨论】:
-
我建议您创建对 Library 对象的引用。创建新属性: public Library Library { get;放;并使用包括图书馆和书架来获取您的书。之后,您更新您的实体并应用所需的更改。要创建一个新的库,请创建一个库对象的新实例,将其添加到您的数据库 (ContextDb) 并将其设置为名为 Library 的新 Book 属性,并保存带有更改的 Book 对象。
-
取书?第一个问题中的书是我想要创建的,所以我无法获取它。另外我希望书内的属性
LibraryId就足够了,而不必创建整个属性库 -
我认为本文档可以解释您可以使用“保存相关数据”做什么。 docs.microsoft.com/en-us/ef/core/saving/related-data。祝你好运。
-
不是真的,我希望通过相关实体的 ID,我能够创建关系。我需要检索完整的对象 Library 和 Bookshelf 并且需要将它们设置在书上,这真的很奇怪。
-
将新图书馆添加到您的数据库中:yourContextDb.Add(new Library { LibraryId = 1, Name = "New Library"}) 并使用新图书馆的 ID 保存您的新书。跨度>
标签: c# entity-framework asp.net-core entity-framework-core