Linq to Entities框架问题-怎么返回两个实体表的联合数据?不想建立框架外的多余联合实体
例如:我有一个Messages表和一个Users表,两表通过UserId建主外关系.
需求中我查找Messages表中数据同时还有发消息的User数据,两表在实体中也是主外关联。
我用LINQ查询时试图给Messages的User导航属性赋值,但报错“无法创建该实体或不支持复杂实体操作”,现在我是单独又建了一个具有两个表字段的类来返回数据.
我是刚接触LINQ和实体框架,我想应该有通过实体框架解决的好一些的方法,大家帮解决一下.
导航属性使用起来很简单的,不需要你去编写额外的访问代码来获取。
你只需要获取到实体对象,并将其导航属性加载(每个导航属性都有一个后缀为Reference的副本,比如一个导航属性名为Car,那么就还会有一个CarReference属性,该属性的Load()方法可用于立即加载导航属性的数据),然后直接访问其导航属性就可以了。
比如要检索第一个用户以及他所拥有的所有短消息,可以这样写:
//取出第一个用户
var u=ent.Users.First();
//立即加载其拥有的所有短消息
u.MsgsReference.Load();
//输出所有短消息
foreach(var f in u.Msgs)
{
...
}
如果获得短消息的发送者(假设该导航属性名为Sender)也是同理:
//取出一个ID号为变量s的短消息
var m=ent.Messages.First(f=>f.ID==s);
//立即加载此短消息的发送者属性内容
m.SenderReference.Load();
//输出发送者的名字
TextBox1.Text=m.Sender.Name;
如果你要同时加载多个用户,并将每个用户的短消息都加载出来,只需要先获得用户对象集合,然后遍历每个用户,分别执行.MsgsReference.Load()即可;无需在查询中涉及短消息表。
如有不明白的可以到我博客给我短信,我最近也是刚开始研究这个:)
不是太了解你的问题,能否用代码展示一下,使用注释说明何处出现何种错误?
答非所问.