如何使用Entity Framework从DataGrid更新数据库

时间:2015-10-29 07:52:58

标签: wpf vb.net entity-framework datagrid newrow

我正在尝试在 Wpf DataGrid with Entity Framework 上使用CRUD操作。 可以成功修改现有行,并保存单击保存按钮更改。当谈到新行时,实体框架SaveChanges由于某种原因没有保存新行。我觉得这很容易,但我不明白这里做错了什么。

我在wpf中有以下页面

<Page x:Class="TaxGroupsListing"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:local="clr-namespace:wendbooksVatRatSetup"
  mc:Ignorable="d" 
  d:DesignHeight="300" d:DesignWidth="300"
  Title="TaxGroupsListing">
<Page.DataContext>
    <local:TaxGroupListingVM  x:Name="test"></local:TaxGroupListingVM>
</Page.DataContext>
<DockPanel >
    <Button Margin="2"  DockPanel.Dock="Top" Content="Load" Command="{Binding Path=LoadCmd}"></Button>
    <Button Margin="2" DockPanel.Dock="Top" Content="Save" Command="{Binding Path=SaveCmd}"></Button>
    <DataGrid  IsSynchronizedWithCurrentItem="True" Margin="2" CanUserAddRows="True" 
              ItemsSource="{Binding Groups,UpdateSourceTrigger=PropertyChanged}">
    </DataGrid>
</DockPanel>

这里显示的ViewModel

Public Class TaxGroupListingVM : Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Sub notify()
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(String.Empty))
End Sub
Property Groups As New ObservableCollection(Of TaxGroup)
Property LoadCmd As New mycommad(AddressOf LoadData)
Property SaveCmd As New mycommad(AddressOf SaveData)
Private db As New SQlDataBaseEntities
Private Sub SaveData()
    db.SaveChanges()
    LoadData()
End Sub
Private Sub LoadData()
    Dim qry = From g As TaxGroup In db.TaxGroups Select g
    Groups = New ObservableCollection(Of TaxGroup)
    For Each item In qry
        Groups.Add(item)
    Next
    notify()
End Sub
End Class

1 个答案:

答案 0 :(得分:1)

当您添加新行时,它只向Group集合添加新项目,而不是将项目添加到DbContext。

添加新行时,处理Groups集合的CollectionChanged事件,并将新项添加到DbContext(类似于db.TaxGroups.Add(newItem))。然后db.SaveChanges应该可以正常工作。

(这可能应该是一个开头的答案,所以在这里添加而不是评论。)