C# 包括导航属性
我有一个类对话,它有一个导航属性C# 包括导航属性,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我有一个类对话,它有一个导航属性列出消息,每一条消息都有一个导航属性用户所有者,现在当我执行类似操作时 foreach (var item in conversation.Messages.ToList()) { //Do something with item.Owner.Name } 它会为每一个项目访问数据库。所有者 在conversation.messages.ToList()?存储库中获取邮件时,如何同时加载邮件
列出消息
,每一条消息都有一个导航属性用户所有者
,现在当我执行类似操作时
foreach (var item in conversation.Messages.ToList())
{
//Do something with item.Owner.Name
}
它会为每一个项目访问数据库。所有者
在
conversation.messages.ToList()
?存储库中获取邮件时,如何同时加载邮件所有者您的对话如下:
return (from c in context.Conversation
where <your where clause>
select c).Include(x => x.Messages.Select(m => m.Owner)).FirstOrDefault();
return(在context.Conversation中从c返回
哪里
选择c).Include(x=>x.Messages.select(m=>m.Owner)).FirstOrDefault();
在存储库中,您的对话如下:
return (from c in context.Conversation
where <your where clause>
select c).Include(x => x.Messages.Select(m => m.Owner)).FirstOrDefault();
return(在context.Conversation中从c返回
哪里
选择c).Include(x=>x.Messages.select(m=>m.Owner)).FirstOrDefault();
要加载多个嵌套级别,有两个选项:
- 使用方法。在您的情况下,它将是:
var query= context.Conversations.Include("Messages.Owner");
此方法接收要包含在查询结果中的相关对象的路径作为参数var query= context.Conversations.Include(c=>c.Messages.Select(m=>m.Owner));
- 采用可拓方法。在您的情况下,它将是:
var query= context.Conversations.Include("Messages.Owner");
在这种情况下,需要将一个lambda表达式作为参数传递,该表达式表示要包含的路径。IMHO这是更好的选择,因为它是强类型的,如果您更改了其中一个属性的名称,您将有一个编译错误var query= context.Conversations.Include(c=>c.Messages.Select(m=>m.Owner));
- 使用方法。在您的情况下,它将是:
var query= context.Conversations.Include("Messages.Owner");
此方法接收要包含在查询结果中的相关对象的路径作为参数var query= context.Conversations.Include(c=>c.Messages.Select(m=>m.Owner));
- 采用可拓方法。在您的情况下,它将是:
var query= context.Conversations.Include("Messages.Owner");
在这种情况下,需要将一个lambda表达式作为参数传递,该表达式表示要包含的路径。IMHO这是更好的选择,因为它是强类型的,如果您更改了其中一个属性的名称,您将有一个编译错误var query= context.Conversations.Include(c=>c.Messages.Select(m=>m.Owner));
var messages=context.Conversations.Include(“messages”).ToList()代码>导航属性是否标记为虚拟?我认为这会导致延迟加载一个渴望加载的示例:var messages=context.Conversations.Include(“messages”).ToList()代码>