1

これは簡単です。エンティティ フレームワークのマスター/詳細関係がある場合、コードに詳細レコードを追加するにはどうすればよいですか? Book という名前の親テーブル/エンティティと、ChapterTitle フィールド/プロパティを含む Chapter という名前の子/ルックアップ テーブル/エンティティがあるとします。ユーザーが ChapterTitles を TextBox に入力してから、[章のタイトルを追加] ボタンをクリックできるようにします。新しい ChapterTitle は、CollectionViewSource を介して Chapters テーブル/エンティティにバインドされた ListView に表示されます。

私は MVVM を使用していません (MVVM に関する回答は求めていません)。この Julie Lerman の投稿で説明されているように、データ ソース ウィンドウからドラッグ アンド ドロップを使用しています。私の場合の違いは、データグリッドを介して詳細を表示および追加する代わりに、ユーザーが新しい章のタイトルを追加するために ListView とテキストボックスを使用していることです。

ドラッグ アンド ドロップにより、XAML に次の 2 つの 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);
    }

ユーザーの章のタイトルをテキスト ボックスから取得し、詳細の CollectionViewSource (bookChaptersViewSource) を介して新しい詳細レコードとして追加するには、button_click イベントにどのコードを追加する必要がありますか? これは非常に単純だと思いますが、あまりにも多くの時間を試してみましたが、運がありませんでした。前もって感謝します!

4

2 に答える 2

0

私はおそらく問題を完全には理解していませんが、通常は新しい子オブジェクトを作成し、それを親の子のリストに割り当てる必要があります。親を保存すると、新しい子オブジェクトが保存されます。または、新しい子オブジェクトの親 ID を割り当てて保存することもできます。

于 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)

本当にそれだけです。オブジェクトを作成してコンテキストに追加し、マスターの詳細コレクションに追加します。上記の例では、Context.AddObject メソッドの「Chapters」は、コンテキストに追加するクラスの EntitySet の名前を参照しています。

ソースが Books Chapter コレクションに設定されている CollectionViewSource は、章の追加を取得し、UI を新しい要素で更新する必要があります。通常、View を変更する場合 (フィルタリング、並べ替えなど) を除いて、CollectionViewSource を操作する必要はありません。

于 2011-04-27T03:05:36.410 に答える