이것은 간단해야합니다 : 엔티티 프레임 워크 마스터 세부 관계가있는 경우 어떻게 코드에 세부 레코드를 추가합니까? Book이라는 부모 테이블/엔티티와 ChapterTitle 필드/속성을 포함하는 chapter라는 하위/룩업 테이블/엔티티가 있다고 가정 해 보겠습니다. 사용자가 TextBox에 ChapterTitles를 입력 한 다음 "장 제목 추가"버튼을 클릭 할 수있게하려고합니다. 그러면 새 장 제목이 CollectionViewSource를 통해 Chapters 테이블/엔티티에 바인딩 된 ListView에 나타납니다.마스터 세부 사항 : 세부 레코드는 어떻게 추가합니까?
MVVM을 사용하고 있지 않습니다. MVVM과 관련된 답변을 찾고 있지 않습니다. this Julie Lerman post에서 설명한대로 데이터 소스 창에서 드래그 앤 드롭을 사용하고 있습니다. 제 경우의 차이점은 DataGrid를 통해 세부 정보를 표시하고 추가하는 대신 ListView와 텍스트 상자를 사용하여 사용자가 새 장 제목을 추가한다는 것입니다.
드래그 앤 드롭은 XAML에서 두 CollectionViewSource 항목을 만들었습니다 :
이<Window.Resources>
<CollectionViewSource x:Key="booksViewSource" d:DesignSource="{d:DesignInstance my:Book, CreateList=True}" />
<CollectionViewSource x:Key="bookChaptersViewSource" Source="{Binding Path=ChaptersNav, Source={StaticResource booksViewSource}}" />
</Window.Resources>
자동 생성 된 코드는 다음과 같습니다
private System.Data.Objects.ObjectQuery<Book> GetBooksQuery(BookEntities bookEntities)
{
// Auto generated code
System.Data.Objects.ObjectQuery<BookNamespace.Book> booksQuery = bookEntities.Books;
// Update the query to include Chapters data in Books. You can modify this code as needed.
booksQuery = booksQuery.Include("Chapters");
// Returns an ObjectQuery.
return booksQuery;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
BookEntities bookEntities = BookEntities();
// Load data into Books. You can modify this code as needed.
System.Windows.Data.CollectionViewSource booksViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("booksViewSource")));
System.Data.Objects.ObjectQuery<BookNamespace.Book> booksQuery = this.GetBooksQuery(bookEntities);
booksViewSource.Source = booksQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
}
내 button_click 이벤트에 추가 할 필요가 무엇 코드
텍스트 상자에서 사용자의 챕터 제목을 가져 와서 세부 정보의 CollectionViewSource (bookChaptersViewSource)를 통해 새로운 세부 레코드로 추가 할 수 있습니까? 나는 이것이 아주 간단 할 것으로 기대할 것이다. 그러나 나는 너무 많은 시간을 보냈지 만 어떤 행운을 보지 못했다. 미리 감사드립니다!
할렐루야 ... 마침내 작동합니다! 나는 이것을 추가했다 : _booksListCollectionView = (ListCollectionView) _booksCollectionViewSource.View; Book MyBook = (책) _factSheetsListCollectionView.CurrentItem; 을 사용하여 현재 상위 레코드를 가져옵니다. 더 좋은 방법이 있습니까? 또한 누군가가 부모 탐색 속성 (MyBook.Chapters)과 하위 엔터티 집합에 모두 새 자식 엔터티를 추가해야하는 이유를 설명 할 수 있습니까? 네비게이션 속성에 추가하면 자동으로 하위 엔티티 집합에 추가됩니다. 감사합니다 코리. StackOverflow 바위! – DeveloperDan
Book 개체의 Chapters 컬렉션에 하위 레코드를 추가하면 장부에 대한 참조 만 추가됩니다. 당신이 실제로 가지고있는 것은 문맥에 붙어 있지 않은 실재물이며 책에 속한다고합니다. EF가 변경 사항을 추적하고 이에 대한 데이터베이스 기능을 수행하려면 컨텍스트에 추가해야합니다. 컨텍스트에 추가하고 부모에게 모두 할당하는 방법을 만들 수 있습니다. 급증 했습니다만, 그다지 큰 거래는 아닙니다.일반적으로 컨텍스트에 먼저 추가 한 다음 부모에 추가합니다. 또한 MVVM없이 최신 버전을 구할 수있는 좋은 방법입니다. – CodeWarrior