代码之家  ›  专栏  ›  技术社区  ›  Gratzy

使用实体框架6查询多个对象

  •  0
  • Gratzy  · 技术社区  · 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()上设置一个断点时,将看到5行记录2。“user”类在每一行中都是重复的。我本以为它只列出一次,其中列出了“userdatas”的项目列表。

    对于包含“userdatas”列表的一行,如何使该查询按预期完成?

    同样,这只是为了学习,所以不要担心数据,如果这是存储数据的最佳方式。

    0 回复  |  直到 6 年前
        1
  •  4
  •   TheGeneral    6 年前

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

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

    一些笔记,

    1. 不需要在表前面加上前缀 tbl
    2. 不需要在字段前加前缀 pk 我是说, fk
    3. 如果你用 Id ,不需要指定 [key]