2013-10-04 32 views
1

我必須通過實體框架的工作更新數據庫的一個問題。的EntityFramework不更新數據庫

我的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(「名稱」);和方法OnnameChanged();不使用

public global::System.String name 
     { 
      get 
      { 
       return _name; 
      } 
      set 
      { 
       OnnameChanging(value); 
       ReportPropertyChanging("name"); 
       _name = StructuralObject.SetValidValue(value, true); 
       ReportPropertyChanged("name"); 
       OnnameChanged(); 
      } 
     } 
+0

試試你的綁定設置爲'模式= TwoWay' – Tico

+0

有你把一個斷點在調試模式上的SaveChanges()? – Xaruth

+0

Mode = TwoWay已設置。 是的,當我把一個斷點在此行中我可以看到我的變化是如何保存在實體模型 – Alex

回答

1

RowEdidEnding在提交修改的行之前觸發。也許在更改提交給綁定對象之前您正在保存。

A(不是很乾淨)解決方案可能是:

private void DataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
{ 
     Dispatcher.BeginInvoke(
     new Action(()=>this.db_test_directoryEntities1.SaveChanges()), 
     System.Windows.Threading.DispatcherPriority.Background); 
} 
+0

哇!它幫助! )Thanx – Alex