SQL 使用 Entity Framework 6 查询多个对象
SQL query to multiple objects using Entity Framework 6
我正在花时间学习 EF(特别是版本 6)。
我在 MSSQL 中创建了两个 table,并将 EF6 链接到创建 EF 模型框架的数据库。
然后我在代码中创建了 classes。我的愿望是用 "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 中的主要记录的测试 table。
第二个查询是我试图提取与该用户相关的所有字段的地方,其中包括名字、姓氏、地址等...
当我在 Console.Readline() 上设置断点时会发生什么,我看到为 record2 列出了 5 行。 "user" class 在每一行中都是重复的。我期待看到只列出一次 "UserDatas".
的项目列表
我怎样才能让这个查询像我期望的那样通过包含 "UserDatas" 列表的一行?
再次强调,这仅用于学习目的,所以不要担心数据以及这是否是存储数据的最佳方式。
它应该像下面这样简单(如果您不需要 projection/anonymous 对象)并假设您的实体配置正确
var user = db.tblUsers
.Include(x => x.UserDatas) // include user data
.FirstOrDefault(); // select the first user
一些笔记,
- 不需要在表前加上
tbl
- 不需要在字段前加上
pk
、fk
- 如果您使用了
Id
,则不需要指定[key]
我正在花时间学习 EF(特别是版本 6)。
我在 MSSQL 中创建了两个 table,并将 EF6 链接到创建 EF 模型框架的数据库。
然后我在代码中创建了 classes。我的愿望是用 "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 中的主要记录的测试 table。
第二个查询是我试图提取与该用户相关的所有字段的地方,其中包括名字、姓氏、地址等...
当我在 Console.Readline() 上设置断点时会发生什么,我看到为 record2 列出了 5 行。 "user" class 在每一行中都是重复的。我期待看到只列出一次 "UserDatas".
的项目列表我怎样才能让这个查询像我期望的那样通过包含 "UserDatas" 列表的一行?
再次强调,这仅用于学习目的,所以不要担心数据以及这是否是存储数据的最佳方式。
它应该像下面这样简单(如果您不需要 projection/anonymous 对象)并假设您的实体配置正确
var user = db.tblUsers
.Include(x => x.UserDatas) // include user data
.FirstOrDefault(); // select the first user
一些笔记,
- 不需要在表前加上
tbl
- 不需要在字段前加上
pk
、fk
- 如果您使用了
Id
,则不需要指定[key]