Я работаю над небольшим проектом для моего универа, и у меня проблема с 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'.
Но если я создаю строку в приложении, я могу отредактировать ее и сохранить без ошибок.Изменения появятся в моей базе данных
Так есть ли проблемы с данными из моей базы данных?