你应该拥有
associations
之间
Message
和
Person
.因为EF设计器会自动创建它们,所以您可能已经创建了。但是,由于这些关联将从外键而不是列名称生成,因此自动创建的关联可能使用不太有用的名称创建,例如
Message.Person1
或者什么的。您可以在设计器中选择它们并将其重命名为更有用的名称。
假设你的协会被称为
Message.FromPerson
和
Message.ToPerson
. 然后您就可以编写如下查询:
var messages = from m in _entities.Message
select new BizObjects.Message
{
MessageId = m.MessageId,
From = new BizObjects.Person
{
PersonId = m.FromPerson.PersonId,
PersonName = m.FromPerson.PersonName
},
To = new BizObjects.Person
{
PersonId = m.ToPerson.PersonId,
PersonName = m.ToPerson.PersonName
},
Subject = m.Subject,
Content = m.Content,
Read = m.Read,
CreatedOn = m.CreatedOn,
};
通过使用LinqToEntities查询中的关联属性,我将导致实体框架将此引用转换为
LEFT OUTER JOIN
在SQL中。
这是一种非常有效的加载数据的方法(尤其是与延迟加载相反,延迟加载会导致对太多的列进行多个数据库查询),因为您只选择实际需要的列,而这一切都是在一个查询中完成的。