我在通过实体框架工作更新数据库方面遇到了问题。
我的XAML代码:
<DockPanel Grid.Row="1"
Margin="0,5,0,0"
DataContext="{StaticResource directoryViewSource}">
<DataGrid ItemsSource="{Binding}"
AutoGenerateColumns="False"
RowEditEnding="DataGrid_RowEditEnding">
<DataGrid.Columns>
<DataGridTextColumn Header="Id"
Binding="{Binding Path=id}"
Width="50"
CanUserResize="True"
IsReadOnly="True" />
<DataGridTextColumn Header="Name"
Binding="{Binding Path=name, Mode=TwoWay}"
Width="*" />
<DataGridTextColumn Header="Sername"
Binding="{Binding Path=sername, Mode=TwoWay}"
Width="*" />
<DataGridTextColumn Header="Address"
Binding="{Binding Path=address, Mode=TwoWay}"
Width="*" />
<DataGridTextColumn Header="Email"
Binding="{Binding Path=email, Mode=TwoWay}"
Width="*" />
<DataGridTextColumn Header="Modified_by"
Binding="{Binding Path=users.user_name}"
Width="*"
IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
</DockPanel>
和c#代码:
WpfApplication1.db_test_directoryEntities1 db_test_directoryEntities1;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.db_test_directoryEntities1 = new WpfApplication1.db_test_directoryEntities1();
System.Windows.Data.CollectionViewSource directoryViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("directoryViewSource")));
System.Data.Objects.ObjectQuery<WpfApplication1.directory> directoryQuery = this.db_test_directoryEntities1.directory;
directoryViewSource.Source = directoryQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
}
private void DataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
this.db_test_directoryEntities1.SaveChanges();
}
所以...... Datacontext更新但数据库不是。我在创建实体模型时创建了数据库(.mdf1)。 你怎么看?为什么数据库不更新
如果我在SaveChanges()上放置一个断点,那么我可以看到如何在ReportPropertyChanged(“name”)上停止设置;和方法OnnameChanged();不使用
public global::System.String name
{
get
{
return _name;
}
set
{
OnnameChanging(value);
ReportPropertyChanging("name");
_name = StructuralObject.SetValidValue(value, true);
ReportPropertyChanged("name");
OnnameChanged();
}
}
答案 0 :(得分:1)
在提交修改后的行之前触发RowEdidEnding。在将更改提交到绑定对象之前,您可能正在保存。
一个(不是很干净)的解决方案可能是:
private void DataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
Dispatcher.BeginInvoke(
new Action(()=>this.db_test_directoryEntities1.SaveChanges()),
System.Windows.Threading.DispatcherPriority.Background);
}