在DataGrid中更新行后,SaveChanges()引发异常[C#] [WPF]

时间:2019-06-17 12:01:11

标签: c# wpf datagrid

我正在为我的uni工作一个小项目,我对DataContext.SaveChanges()有问题

我有一个连接到我的应用程序(WPF)的SQL Server Express数据库,并添加了具有DataBinding的DataGrid控件。

这些控件显示了我来自数据库的数据。添加或删除行,然后单击按钮(调用dataContext.SaveChanges()方法)后,一切正常。

但是当我编辑任何行并尝试将其保存到数据库时,我收到一条错误消息,提示我无法将Hashset转换为System.Array。

以下是XAML中的一些代码:

<DataGrid x:Name="filmDataGrid" AutoGenerateColumns="False" Grid.ColumnSpan="2" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource filmViewSource}}" Margin="25,18,593,153" RowDetailsVisibilityMode="VisibleWhenSelected">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="filmIdColumn2" Binding="{Binding FilmId}" Header="Film Id" Width="SizeToHeader"/>
        <DataGridTextColumn x:Name="titleColumn" Binding="{Binding Title}" Header="Title" Width="110"/>
        <DataGridTextColumn x:Name="lengthColumn" Binding="{Binding Length}" Header="Length" Width="70"/>
        <DataGridTemplateColumn x:Name="premiereDateColumn" Header="Premiere Date" Width="110">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <DatePicker SelectedDate="{Binding PremiereDate, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

DataGrid的按钮:

<Button Content="Save" Grid.Column="1" HorizontalAlignment="Left" Margin="10,262,0,0" VerticalAlignment="Top" Width="82" Height="25" Click="Button_Click_2"/>

后面的代码:

 MyContext _context = new MyContext();
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            System.Windows.Data.CollectionViewSource screeningViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("screeningViewSource")));
            _context.Screenings.Load();
            screeningViewSource.Source = _context.Screenings.Local.ToBindingList();

            System.Windows.Data.CollectionViewSource filmViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("filmViewSource")));
            _context.Films.Load();
            filmViewSource.Source = _context.Films.Local.ToBindingList();

            System.Windows.Data.CollectionViewSource hallViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("hallViewSource")));
            _context.Halls.Load();
            hallViewSource.Source = _context.Halls.Local.ToBindingList();

            System.Windows.Data.CollectionViewSource customerViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("customerViewSource")));
            _context.Customers.Load();
            customerViewSource.Source = _context.Customers.Local.ToBindingList();

        }


        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            _context.SaveChanges();
        }

我的模特:

    public class Film
    {
        [Key]
        public int FilmId { get; set; }
        [MaxLength(40)]
        public string Title { get; set; }
        public float Length { get; set; }
        public string Description { get; set; }
        public DateTime PremiereDate { get; set; }
        public byte[] Picture { get; set; }

    }
  public class MyContext : DbContext
    {
        public MyContext() : base("MyContext")
        {
            Database.Log = Console.Write;
        }     
        public DbSet<Film> Films { get; set; }

    }

例外:

  

System.Data.Entity.Validation.DbUnexpectedValidationException:在调用System.ComponentModel.DataAnnotations.MaxLengthAttribute.IsValid的“筛选”验证期间引发了意外异常。有关详细信息,请参见内部异常。

     

InvalidCastException:无法将对象'System.Collections.Generic.HashSet`1 [db1.Screening]'强制转换为'System.Array'。

但是,如果我在应用程序中创建了一行,则可以对其进行编辑并保存没有错误。然后,更改将出现在我的数据库中

那么我的数据库中的数据有问题吗?

0 个答案:

没有答案