【问题标题】:EntityFramework doesn't update databaseEntityFramework 不更新数据库
【发布时间】:2013-10-04 13:49:50
【问题描述】:

我在通过实体框架更新数据库时遇到问题。

我的 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();
        }

所以.. 数据上下文更新但数据库没有。数据库 (.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();
            }
        }

【问题讨论】:

  • 尝试将您的绑定设置为Mode=TwoWay
  • 你是否在 SaveChanges() 的调试模式下设置了断点?
  • Mode=TwoWay 已设置。是的,当我在这一行设置断点时,我可以看到我的更改是如何保存在实体模型中的
  • 如果在DataGrid_RowEditEnding中放了一个断点,是否可以查看item来确认对象的状态是被编辑的?
  • 我的问题几乎没有改变

标签: c# .net wpf database entity-framework


【解决方案1】:

在提交修改的行之前触发 RowEdidEnding。也许您在将更改提交到绑定对象之前保存。

一个(不是很干净的)解决方案可能是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多