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

标签 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() 上设置断点时会发生什么,我看到为 record2 列出了 5 行。 “用户”类在每一行中都是重复的。我期待看到只列出一次“UserDatas”的项目列表。

我怎样才能让这个查询如我所料地通过包含“UserDatas”列表的一行?

再次重申,这仅用于学习目的,所以不要担心数据以及这是否是存储数据的最佳方式。

最佳答案

它应该像下面这样简单(如果你不需要投影/匿名对象)并假设你的实体配置正确

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

一些笔记,

  1. 不需要在表前加上tbl
  2. 不需要在字段前加上pk, fk
  3. 如果您使用了Id,则不需要指定[key]

关于c# - 使用 Entity Framework 6 对多个对象进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55011869/

相关文章:

c# - Azure 弹性数据库合并 GUI key 碎片

c# - 通过C#从Arduino读取串行数据

c# - 无法在代码中获取 DropDownList 的文本 - 可以获取值但不能获取文本

c# - 如何使用 Newtonsoft.Json 序列化 "Really"循环引用对象?

c# - Entity Framework IQueryable 扩展方法不能用作子查询

entity-framework-6 - 从int到Guid主键问题的代码优先迁移

c# - 将引用属性映射到抽象父级

c# - 如何判断我的应用程序是否已从剪贴板监听器链中删除?

c# - Entity Framework 。删除表中的所有行

c# - 始终使用 Entity Framework 加密,并且包含无法实现查询