繁体   English   中英

MVVM的EF5 SaveChanges

[英]EF5 SaveChanges with MVVM

我正在使用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

我在应用程序中做了类似的事情。 尝试以下类似的操作(我通常为此使用存储库,因此请更改以适合您的需求);

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

这是我实现这一目标的方法。 您可以采用不同的方式和方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM