엔티티 프레임 워크에 중첩 된 컬렉션의 요소를 삭제 : I는 해당 컬렉션의 개별 페이지와 책을 제거 할 수 있도록하려면나는 다음과 같은 엔티티 클래스의 개체를 저장하는 엔티티 프레임 워크를 사용하고
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.
가의 일부이기 때문에 나는 오류가 아마 LibraryId
을 포함해야 Page
의 외래 키에 의심 Book
PK ... 구성을 어떻게 수정해야합니까?
아마 당신의 FK가'Book'의 PK의 일부만을 참조하기 때문에 잘못된 것일까 요? https://stackoverflow.com/a/11755058/7034621 – orhtej2
이 모델에는 많은 결함이 있습니다. 첫째, 'Identity' 열은 이미 고유하므로 복합 PK를 만들 필요가 전혀 없습니다. 둘째,'.WithOptional()'매핑은 모두 잘못되었습니다 - FK는'int'이므로 ** 필수 **입니다. 또한 해당 네비게이션 속성도 매핑되지 않습니다. –