首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多虚拟机的EF5 SaveChanges

具有多虚拟机的EF5 SaveChanges
EN

Stack Overflow用户
提问于 2013-07-15 19:44:03
回答 1查看 1.2K关注 0票数 1

我正在用WPF编写第一个MVVM应用程序,使用EF5和“数据库优先”的方法。我在MVVM中的模型就是EF5为我生成的模型(我确实需要定制T4模板来包含INotifyPropertyChanged)。

一切似乎都很正常,更改文本框中的文本在我的模型中引发了一个属性更改。我现在正在尝试将这些更改保存到数据库中。我没有收到任何错误,但更改未提交。

恐怕,在我的视图模型中执行context.savechanges()还不够?

代码语言:javascript
复制
private void UpdatePerson()
    {
        using (CvContext ctx = new CvContext())
        {
            ctx.SaveChanges();
        }
    }

在我的XAML中,我有:

代码语言:javascript
复制
<UserControl.DataContext>
    <myViewModels:PersonDetailViewModel/>
</UserControl.DataContext>
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtLastName" Text="{Binding Path=Lastname}"></TextBox>

我是否需要在edmx designer中定义插入/更新/删除,或者这并不是真正必要的?

提前感谢您的帮助!致以最好的问候,YK

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-15 20:00:48

我已经在我的应用程序中做了类似的事情。尝试下面这样的方法(我通常使用存储库,因此可以根据您的需要进行更改);

代码语言:javascript
复制
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中,我做了以下事情--例如;

代码语言:javascript
复制
private Void Update()
{
     PersonRepository rep = new PersonRepository();
     rep.UpdatePerson(this);
}

这就是我实现这一点的方式。您可以使用不同的方法和方法。

如果我遗漏了什么,请让我知道:)。希望这能有所帮助!:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17653472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档