我是WPF的新手,过去曾使用Entity Framework,但决定为我的新项目尝试Entity Framework Core。我似乎无法理解如何将这些抽象与事物联系起来。
假设我有一个带有数据网格的视图,并且想显示学生及其状态的列表。该应用程序将加载一个表单,当用户单击一个按钮时,它将在网格中显示学生列表。
<UserControl.Resources>
<CollectionViewSource x:Key="tblStudentsViewSource" d:DesignSource="{d:DesignInstance {x:Type DB:TblStudents}, CreateList=True}"/>
</UserControl.Resources>
<Grid DataContext="{StaticResource tblStudentsViewSource}">
<Button Content="Students" HorizontalAlignment="Left" Margin="10,313,0,0"
VerticalAlignment="Top" Width="64" Height="40" Click="Button_Click"/>
<DataGrid x:Name="StudentsGrid" Height="300" Width="200" Margin="0,200,400,0" ItemsSource="{Binding}" />
</Grid>
Button_Click
事件显示网格要求ViewModel
填充列表。
private void Button_Click(object sender, RoutedEventArgs e)
{
StudentsGrid.Visibility = Visibility.Visible;
StudentListViewModel plvm = new StudentListViewModel();
plvm.LoadStudentList();
tblStudentsViewSource.Source = plvm.ListStudents;
}
视图模型将访问数据库上下文以获取数据。由于我要将两个相关表中的几个字段汇总在一起,因此我想使用存储过程来获取数据。 EF Core为我创建了表类(首先是数据库),因此我松散地遵循了代码为查询创建连接。
public partial class SchoolDBContext : DbContext
{
....
public virtual DbSet<TblStudents> TblStudents { get; set; }
public virtual DbQuery<QryStudentSearch> QryStudentSearch { get; set; }
....
modelBuilder.Query<QryStudentSearch>(entity =>
{
entity.Property(e => e.lngStudentId).HasColumnName("lngStudentID");
entity.Property(e => e.strLastName).HasColumnName("strLastName");
entity.Property(e => e.strFirstName).HasColumnName("strFirstName");
entity.Property(e => e.strStatusDescription).HasColumnName("strStatusDescription");
});
}
我现在需要获取数据,并填写对象以发送到视图中的网格。这就是它总是失败的地方,并且根据我发现的用于从EF实体中填充视图模型对象的示例,我尝试了多种方法来执行此操作。它们都不与查询一起使用。它仅适用于一张桌子。
这是我尝试过的一种方式。
using ( Db = new SchoolDbContext())
{
var students = Db.Query<QryStudentSearch>();
foreach (var entity in students)
{
ListStudent Student = new ListStudent();
student.StudentId = entity.lngStudentId;
student.FullName = entity.strFullName;
student.StatusDescription = entity.strStatusDescription;
ListStudents.Add(Student);
}
}
可以编译并运行,但是在运行时出现错误
无效的对象名称QryStudentSearch
在foreach循环内。
我想念的是什么,还是我走错了路?