這應該很簡單:如果我有一個實體框架主細節關係,我該如何在代碼中添加細節記錄?比方說,我有一個名爲Book的父表/實體和一個名爲Chapter的子/查找表/實體,其中包含一個ChapterTitle字段/屬性。我希望用戶能夠將ChapterTitles輸入到TextBox中,然後單擊「添加章節標題」按鈕。新的ChapterTitle將出現在通過CollectionViewSource綁定到Chapters表/實體的ListView中。主要細節:如何添加詳細記錄?
我不使用MVVM(並且我不尋求涉及MVVM的答案)。我正在使用數據源窗口中的拖放操作,如this Julie Lerman post中所述。在我的情況的區別是,而不是通過數據網格顯示和添加詳細信息我使用ListView和文本框爲用戶添加新章節標題。
拖放設立了兩個CollectionViewSource條目在XAML:
<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 =(Book)_factSheetsListCollectionView.CurrentItem; 獲取當前父記錄。有沒有更好的辦法?另外,有人可以解釋爲什麼新的子實體需要添加到父導航屬性(MyBook.Chapters)和子實體集?我認爲將其添加到導航屬性會自動將其添加到子實體集。感謝Cory。 StackOverflow岩石! – DeveloperDan 2011-04-27 14:38:11
將子記錄添加到Book對象中的Chapters集合中僅添加對書中章節的引用。你真正擁有的是一個實體,與上下文無關,它說它屬於本書。爲了EF追蹤它的變化並在其上執行數據庫功能,它必須被添加到上下文中。你可以創建一個方法將其添加到上下文中,並一舉將其分配給父項,但這並不是什麼大事。我通常首先添加到上下文中,然後添加到父項。而且,這是一種在沒有MVVM的情況下獲得當前流程的很好方法。 – CodeWarrior 2011-04-27 14:42:30