EF5用MVVM保存更改

本文关键字:保存更改 MVVM EF5 | 更新日期: 2023-09-27 18:22:17

我正在WPF中使用"数据库优先"方法使用EF5编写第一个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设计器中定义insert/update/delete吗?或者这真的没有必要吗?

提前感谢您的帮助!顺致敬意,YK

EF5用MVVM保存更改

我在应用程序中也做了类似的事情。试试我下面的东西(我通常使用一个存储库来进行更改以满足您的需求);

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);
}

这就是我实现这一目标的方式。有不同的方法和不同的方法,你可以做。

如果我错过了什么,请告诉我:)。希望这能有所帮助!:)