使用实体框架核心的WPF视图和视图模型

时间:2019-08-30 19:01:18

标签: c# wpf visual-studio entity-framework-core

我是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循环内。

我想念的是什么,还是我走错了路?

0 个答案:

没有答案
相关问题