SaveChanges () после обновления строки в DataGrid выдает исключение [C #] [WPF] - PullRequest
1 голос
/ 17 июня 2019

Я работаю над небольшим проектом для моего универа, и у меня проблема с DataContext.SaveChanges ()

У меня есть база данных SQL Server Express, подключенная к моему приложению (WPF), и я добавил 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: возникло непредвиденное исключениево время проверки 'Screenings' при вызове System.ComponentModel.DataAnnotations.MaxLengthAttribute.IsValid.Подробности см. Во внутреннем исключении.

InvalidCastException: невозможно преобразовать объект 'System.Collections.Generic.HashSet`1 [db1.Screening]' в 'System.Array'.

Но если я создаю строку в приложении, я могу отредактировать ее и сохранить без ошибок.Изменения появятся в моей базе данных

Так есть ли проблемы с данными из моей базы данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...