1

这应该很简单:如果我有一个实体框架主从关系,我如何在代码中添加一个详细记录?假设我有一个名为 Book 的父表/实体和一个名为 Chapter 的子表/查找表/实体,其中包含一个 ChapterTitle 字段/属性。我希望用户能够在文本框中键入章节标题,然后单击“添加章节标题”按钮。然后,新的 ChapterTitle 将出现在通过 CollectionViewSource 绑定到 Chapters 表/实体的 ListView 中。

我没有使用 MVVM(我也没有寻求涉及 MVVM 的答案)。我正在使用此 Julie Lerman 帖子中所述的数据源窗口中的拖放操作。我的情况的不同之处在于,我没有通过数据网格显示和添加详细信息,而是使用 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) 将其添加为新的详细信息记录?我希望这很简单,但是我花了太多时间尝试却没有任何运气。提前致谢!

4

2 回答 2

0

我可能没有完全理解这个问题,但通常您需要创建一个新的子对象并将其分配给父级的子级列表。当您保存父对象时,它应该保存新的子对象。或者您可以分配新子对象的 parentid 并保存它。

于 2011-04-26T21:16:13.550 回答
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。通常,您不必与 CollectionViewSource 交互,除非更改视图(过滤、排序等)。

于 2011-04-27T03:05:36.410 回答