我有一个winforms应用程序,其中有一组实体文本框,让我们将该实体命名为Product
我的一个文本框被隐藏了,因为它持有另一个数据库对象Business Unit的外键。我使用查找父表上的值的组合框填充隐藏的文本框。当所选内容更改时,隐藏文本框中的值也会更改。
private void businessUnitComboBox_SelectionChangeCommitted(object sender, EventArgs e)
{
this.businessUnitIdTextBox.Text = this.businessUnitComboBox.SelectedValue.ToString();
this.businessUnitComboBox.Focus();
}问题是在我的上下文中调用SaveChanges之后,隐藏的textbox上的更改不会持久。奇怪的是,如果我更新任何其他Product文本框,它们都保存得很好。
文本框是通过从Visual Studio的GUI通过标准拖放添加到项目中的,并且在自动添加时会创建一个bindingsource。
我的实体使用fody-propertychanged实现INotifyPropertyChanged。
我正在努力寻找这里的问题。创建新记录很好,但更新那个外键值永远不会。
这是因为它是一个导航属性,需要以不同的方式处理,还是存在其他原因导致更改不持久的可能性?任何帮助都是非常感谢的。
发布于 2015-08-25 06:01:03
可能是因为Save方法中缺少this.Validate()。将此代码放入窗体的save方法中。
this.Validate();
this.yourBindingSource.EndEdit();
yourDbContext.SaveChanges();数据绑定的默认行为是OnValidation。
要更改此行为,您可以转到textbox属性,打开数据绑定部件,打开高级,将数据源更新模式更改为OnPropertyChanged。
因此,设计器生成的代码中的数据绑定代码如下所示:
this.nameTextBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.productBindingSource, "Category.Name", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));在这种情况下,在保存更改之前不需要使用this.Validate,只需使用
this.yourBindingSource.EndEdit();
yourDbContext.SaveChanges();https://stackoverflow.com/questions/32191746
复制相似问题