1

「データベースファースト」アプローチでEF5を使用して、WPFで最初のMVVMアプリケーションを作成しています。MVVM のモデルは、EF5 が生成したものです (T4 テンプレートをカスタマイズして、INotifyPropertyChanged を含める必要がありました)。

テキストボックス内のテキストを変更すると、モデルでプロパティ変更が発生しました。これらの変更をデータベースに保存しようとしています。エラーは発生しませんが、変更は送信されません。

ビューモデルで context.savechanges() を実行するだけでは不十分ですか?

private void UpdatePerson()
    {
        using (CvContext ctx = new CvContext())
        {
            ctx.SaveChanges();
        }
    }

私のXAMLには次のものがあります:

<UserControl.DataContext>
    <myViewModels:PersonDetailViewModel/>
</UserControl.DataContext>
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtLastName" Text="{Binding Path=Lastname}"></TextBox>

edmx デザイナーで挿入/更新/削除を定義する必要がありますか、それとも本当に必要ではないですか?

よろしくお願いします。よろしく、YK

4

1 に答える 1

1

私は自分のアプリケーション内で同様のことをしました。以下のようなことを試してください(通常、これにはリポジトリを使用するため、ニーズに合わせて変更してください);

private void UpdatePerson(PersonViewModel v)
{
    using (ProActiveDBEntities context = new ProActiveDBEntities())
    {
        var p = context.Users.Where(c => c.PersonID == v.PersonID).SingleOrDefault(); //retrieve the person by its PK ID

        if (p != null)
        {
           p.PersonID = v.PersonID; //Map the properties/Fields within your EF model to the ones in your view model
           p.Surname = v.Surname;
           //etc...

           context.SaveChanges();
        }
     }
}

前述したように、私は通常、リポジトリを使用して EF の CRUD 操作を作成します。しかし、メソッド内には、ViewModel のパラメーターがあります。次に、エンティティ テーブルの ID を ViewModel の ID に一致させる式を作成します。次に、マップされている対応するデータを更新します。

次に、ViewModel 内で次のことを行います。

private Void Update()
{
     PersonRepository rep = new PersonRepository();
     rep.UpdatePerson(this);
}

これは、これを達成するための私の方法です。あなたができるさまざまな方法とさまざまなアプローチがあります。

私が何かを逃した場合は、私に知らせてください:)。これが役に立ったことを願っています!:)

于 2013-07-15T12:00:48.120 に答える