【问题标题】:Retrive data from two tables and populate DataGrid Entity Framework从两个表中检索数据并填充 DataGrid 实体框架
【发布时间】:2018-08-20 12:23:06
【问题描述】:

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

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

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-server database wpf entity-framework


    【解决方案1】:

    如果CustomerInvoice 的导航属性,您可以使用预加载来加载它,例如:

    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" />
    

    【讨论】:

    • 非常感谢先生!祝福..你能解释一下这行 context.Invoices.Include(x => x.Customer).ToList();
    • 好吧,我刚刚明白了。Include 是急切的强制加载!我可以使用默认实体框架现象的延迟加载吗?
    • 这取决于你的上下文的生命周期。但是,如果您有其他问题,请提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多