我使用實體框架存儲以下實體類的對象:刪除嵌套集合的元素在實體框架
public class Library
{
public int Id { get; set; }
private ICollection<Book> _books;
public virtual ICollection<Book> Books => _books ?? (_books = new List<Book>());
}
public class Book
{
public int Id { get; set; }
public int LibraryId { get; set; }
public virtual Library Library { get; set; }
private ICollection<Page> _pages;
public virtual ICollection<Page> Pages => _pages ?? (_pages = new List<Page>());
}
public class Page
{
public int Id { get; set; }
public int BookId { get; set; }
public virtual Book Book { get; set; }
}
我希望能夠去除從相應的集合個人頁面和書,所以我做下面的配置與流暢的API:
modelBuilder.Entity<Library>()
.HasMany(library => library.Books)
.WithOptional()
.HasForeignKey(book => book.LibraryId);
modelBuilder.Entity<Book>()
.HasKey(book => new { book.Id, book.LibraryId })
.Property(book => book.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Book>()
.HasMany(book => book.Pages)
.WithOptional()
.HasForeignKey(page => page.BookId);
modelBuilder.Entity<Page>()
.HasKey(page => new { page.Id, page.BookId })
.Property(page => page.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
創建組合鍵爲Book
和Page
,併成立了一個一對多的關係。
當我嘗試創建一個遷移我收到以下錯誤:
Book_Pages_Source_Book_Pages_Target: : The number of properties in the Dependent and Principal Roles in a relationship constraint must be identical.
我懷疑的錯誤是對Page
外鍵,這可能應該包括LibraryId
,因爲它是部分PK Book
...我應該如何修復配置?
也許你的頁面上的FK是錯誤的,因爲它只引用'Book'的PK的一部分? https://stackoverflow.com/a/11755058/7034621 – orhtej2
這個模型有很多缺陷。首先,「身份」列已經是唯一的,所以完全不需要創建複合PK。其次,'.WithOptional()'映射都是錯誤的--FK是'int',因此**需要**,並且相應的導航屬性也沒有映射。 –