这应该很简单:如果我有实体框架主细节关系,我如何在代码中添加详细记录?假设我有一个名为Book的父表/实体和一个名为Chapter的子/查找表/实体,其中包含ChapterTitle字段/属性。我希望用户能够将ChapterTitles键入TextBox,然后单击“添加章节标题”按钮。然后,新的ChapterTitle将出现在ListView中,该ListView通过CollectionViewSource绑定到Chapters表/实体。
我没有使用MVVM(我不是在寻求涉及MVVM的答案)。我正在使用this Julie Lerman post中所述的数据源窗口中的拖放操作。我的不同之处在于,我不是通过数据网格显示和添加细节,而是使用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)将其添加为新的详细记录?我希望这很简单,但我花了太多时间尝试而没有任何运气。提前谢谢!
答案 0 :(得分:0)
我可能不完全理解这个问题,但通常需要创建一个新的子对象并将其分配给父级的子级列表。保存父项时,应保存新的子项。 或者您可以分配新子对象的parentid并保存它。
答案 1 :(得分:0)
对不起VB,但它应该很容易翻译:
Dim c as Chapter = New Chapter
c.Title = ChapterTitleTextBox.Text
context.AddObject(c, "Chapters")
MyBook.Chapters.Add(c)
这就是它的全部内容。创建对象,将其添加到上下文中,将其添加到Master的详细信息集合中。在上面的示例中,在Context.AddObject方法中,“Chapters”指的是要添加到上下文中的类的EntitySet的名称。
将CollectionViewSource的源设置为Books Chapter集合,应该选择添加章节,并且应该使用新元素更新UI。通常,除非更改View(过滤,排序等),否则不必与CollectionViewSource进行交互。