使用实体框架进行单个数据库调用获取多个表格

4

我是ASP.NET MVC和Entity framework的新手。之前我使用过ADO.NET Datatables和DataSets。因此,在需要从数据库获取多个表的情况下,我会使用DataSet。

例如:

ALTER PROCEDURE [dbo].[SpTest]
As
Begin

    Select * from Table1
    Select * from Table2

End

在C#中,我曾经做过...
Dataset ds = DAL.GetDataSetBySp("SpTest");
Datatable dt1 = ds.Tables["Table1"];
Datatable dt2 = ds.Tables["Table2"];

现在,如果我想要使用Entity Framework在单个数据库调用中使用多个表,我该怎么做呢?

答案很简单:你不能。EF 中没有类似 NHibernate 的多查询。但我可以问一下你需要什么?也许你的问题可以用不同的方法解决。 - Gert Arnold
在我的应用程序中,我有一个主页上的仪表板。那实际上是整个应用程序的概述。数据来自不同的表格。一些表格彼此相关,而另一些则没有关系。我遇到的问题是那些彼此没有关系的表格。 - Usman Khalid
如果您可以将每个表的数据压缩到相同的行结构中,那么最接近的方法就是使用“Union”。 - Gert Arnold
我尝试过那样做,但不幸的是那不是一个选项。 :( - Usman Khalid
我认为现在我需要进行多个数据库调用,并将数据设置在ViewModel中,然后传递给View。 - Usman Khalid
看起来这是唯一的选择。 - Gert Arnold
1个回答

0

你可以这样做,但是表格之间应该有关联:

public class Table1
{
 [Key]
 public int IDCol{ get; set; }
 public string Col2{ get; set; }
}

public class Table2
{
 [Key]
 public int IDCol2{ get; set; }
 public int IDCol{ get; set; }
 public string Col3{ get; set; }
}

public class JoiningTable
{
  public int IDCol1{ get; set; }
  public int IDCol2{ get; set; }
  public string Col2 { get; set; }
  public string Col3 { get; set; }
}

public List<JoiningTable> GetData()
{
 List<JoiningTable> bothTablesData =
      from t in Table1
      join t2 in Table2
      on t.IDCol equals t2.IDCol1 
      select new { IDCol1 = t.IDCol, Col3 = t2.Col3, Col2 = t.Col2 }.ToList<JoiningTable>();

  return bothTablesData;
}

如果两个表之间有关联,那么就没有任何问题。甚至您都不必创建连接表。我是在询问没有关系的表。 - Usman Khalid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接