我正在为我的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'。
但是,如果我在应用程序中创建了一行,则可以对其进行编辑并保存没有错误。然后,更改将出现在我的数据库中
那么我的数据库中的数据有问题吗?