c# - 我应该什么时候更新数据库以反射(reflect)属性变化?

标签 c# wpf data-binding mvvm

我是 WPF 的新手,我正在使用 Linq To Entities(和 SQLite 数据库)构建一个小应用。

我只是想知道,当属性发生变化时,我必须在哪里调用我的方法才能更新数据库? 我会在 ViewModel 的属性中这样说:

public string FirstName
{
    get
    {
        return this.person.FirstName;
    }
    set
    {
        this.person.FirstName = value;
        OnPropertyChanged("FirstName");
        this.person.updateFirstname(value);
    }
}

我不确定这是否是最好的解决方案...

最佳答案

何时保存到数据库的问题导致了 Unit of Work pattern . Linq-to-Entities 通过 ObjectContext 合理地实现了这一点,其中数据在上下文中排队,然后在逻辑工作单元完成时保存到数据库。

在您的示例中,您已经在可能连接到上下文的 L2E 实体 Person 上设置了属性。当您调用 ObjectContext.SaveChanges , 这将被保存而不需要 updateFirstname 方法。

您必须决定何时调用 ObjectContext.SaveChanges(从而结束工作单元),并在用户明确保存或关闭表单时执行此操作(可选提示供用户提交或放弃更改)是一种合理的方法。为实现这一点,您的 View 模型引用 ObjectContext 并可以在执行用户操作(通常使用 WPF ICommand published by the viewmodel and bound to the view 建模)时调用 SaveChanges 方法。

关于c# - 我应该什么时候更新数据库以反射(reflect)属性变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384425/

相关文章:

c# - 当我们按下 Enter 键时触发的 WPF TextBox 命令

wpf - ContentPresenter 触发器不起作用

c# - 将 CheckBox IsChecked 属性绑定(bind)到 ListView 的 SelectedItems 属性

c# - 在 C#.NET 中使用回车键检查复选框

c# - 检测非聚焦窗口上的鼠标滚轮?

c# - 切换枚举自动填充

c# - 如何让 C# 设计器编辑我的结构属性?

c# - Serilog 日志记录库可以在 .net WPF 应用程序中工作吗?

wpf - 如何将 View 模型方法的结果数据绑定(bind)到 TextBox 属性?

java - Spring的DataBinder是如何用来转换普通参数值的?