首页 > 解决方案 > 从两个表中检索数据并填充 DataGrid 实体框架

问题描述

我正在使用实体框架。我的数据库客户和发票中有 2 个表。发票表有一列 CustomerID 作为外键来引用客户。
数据库中的表

我正在使用DataGrid具有以下列的,如图所示。

数据网格

DataGrid应该显示发票表中的数据和客户表中的客户名称。请帮我如何查询这个?
数据网格

<DataGrid IsReadOnly="False" Margin="0 10 0 0" Background="white" Name="InvoiceGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Invoice ID" IsReadOnly="True" MinWidth="100"/>
        <DataGridTextColumn Header="Date" IsReadOnly="True" MinWidth="100" />
        <DataGridTextColumn Header="Customer" IsReadOnly="True" MinWidth="250" />
        <DataGridTextColumn Header="Quantity" IsReadOnly="True" MinWidth="80" />
        <materialDesign:MaterialDataGridTextColumn IsReadOnly="True" Header="Total" MinWidth="150" />  

上下文类

public partial class Intelliventory_DBEntities : DbContext
{
    public Intelliventory_DBEntities()
        : base("name=Intelliventory_DBEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Category> Categories { get; set; }
    public virtual DbSet<Customer> Customers { get; set; }
    public virtual DbSet<Employee> Employees { get; set; }
    public virtual DbSet<Invoice> Invoices { get; set; }
    public virtual DbSet<InvoiceItem> InvoiceItems { get; set; }
    public virtual DbSet<Product> Products { get; set; }
    public virtual DbSet<Purchase> Purchases { get; set; }
    public virtual DbSet<Supplier> Suppliers { get; set; }
    public virtual DbSet<sysdiagram> sysdiagrams { get; set; }
}

标签: c#sql-serverdatabasewpfentity-framework

解决方案


如果Customer是 的导航属性Invoice,您可以使用急切加载来加载它,例如:

var context = new Intelliventory_DBEntities();
InvoiceGrid.ItemsSource = context.Invoices.Include(x => x.Customer).ToList();
//...
context.Dispose();

然后,您可以将该列绑定到导航属性:

<DataGridTextColumn Header="Invoice ID" Binding="{Binding InvoiceID}" IsReadOnly="True" MinWidth="100"/>
<DataGridTextColumn Header="Date" Binding="{Binding Date}" IsReadOnly="True" MinWidth="100" />
<DataGridTextColumn Header="Customer" Binding="{Binding Customer.CustomerName}" IsReadOnly="True" MinWidth="250" />

推荐阅读