使用Entity Framework 6对多个对象进行SQL查询

时间:2019-03-05 21:27:46

标签: c# entity-framework entity-framework-6

我正在花时间学习EF(特别是第6版)。

我在MSSQL中创建了两个表,并将EF6链接到创建EF模型框架的数据库。

然后我用代码创建了类。我的愿望是在一行中拉出“ UserDatas”的项目列表(是的,我知道它的拼写错误)。

考虑以下代码:

public class user
{
    [Key]
    public int pkID;
    public string ForeignCode;
    public string UserName;
    public virtual List<UserData> UserDatas { get; set; }
}

public class UserData
{
    [Key]
    public int pkID;
    public int fkUserID;
    public string ColumnName;
    public string ColumnValue;
}

class Program
{
    static TestData db = new TestData();

    static void Main(string[] args)
    {
        var record = db.tblUsers.Select(x => new { x.UserName, x.pkID }).FirstOrDefault();

        var record2 = db.tblUsers.Include(x => x.tblUserDatas).ToList();

        Console.ReadLine();
    }


}

第一个查询只是一个测试,用于提取tblUsers表中的主记录。

第二个查询是我尝试提取与该用户相关的所有字段的地方,其中包括名字,姓氏,地址等...

当我在Console.Readline()上设置一个断点时会发生什么,我看到记录2列出了5行。 “用户”类在这些行的每行中重复。我希望看到它只列出一次,并带有“ UserDatas”的项目列表。

如何通过包含“ UserDatas”列表的一行来按预期进行查询?

同样,这只是出于学习目的,因此不必担心数据,如果这是存储数据的最佳方法。

1 个答案:

答案 0 :(得分:4)

它应该和以下内容一样简单(如果不需要投影/匿名对象),并假设您的实体配置正确

var user = db.tblUsers
             .Include(x => x.UserDatas) // include user data
             .FirstOrDefault(); // select the first user

一些笔记

  1. 无需在表前加上tbl
  2. 无需为字段加上pkfk
  3. 如果您使用Id,则无需指定[key]