主要详细信息:如何添加详细记录?

时间:2011-04-26 21:11:07

标签: wpf entity-framework binding collectionviewsource

这应该很简单:如果我有实体框架主细节关系,我如何在代码中添加详细记录?假设我有一个名为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)将其添加为新的详细记录?我希望这很简单,但我花了太多时间尝试而没有任何运气。提前谢谢!

2 个答案:

答案 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进行交互。