我使用Entity Framwork 4.1和MVC 3.我的问题是关于在Entity Framework中连接表。 我创建了三个表
我把这些表拉到我的edmx文件中, 只显示两个表,即两个表之间的用户和角色,多对多关联。
如果我想从UserInRoles表中获取用户的角色,那么方法是什么?
我做了类似
的事情var result = (from ar in roles
from au in users
where au.UserName == username
select new {});
这不起作用。请帮忙。
答案 0 :(得分:1)
正如您所猜测的,实体框架会将这样的简单查找表组合到父表中,以帮助您解决问题。您将无法访问代码中的查找表,但它将执行繁重的工作,并允许您在这些表中导航。
var result = (from ar in roles
where ar.Users.UserName == username
select ar);
或者如果你喜欢lambdas(个人喜好):
var result = context.roles.Where(x => x.Users.UserName == username);
答案 1 :(得分:0)
我想应该将它们联系起来:
var result =
from au in users
where au.UserName == username
select au.Roles;
默认情况下,不确定它是否会为您提供空集合。可能必须手动获取Roles集合。 (可能是result.Fetch(),但我对它不太熟悉。)
(或者您是否可以访问存储在数据库中的实际UserInRole项目?)
答案 2 :(得分:0)
实体框架在模型中自动生成多对多关系,当只有一个共享主键的关系是其他表的外键时。
您可以在此表中添加其他列,以将其添加到模型中,也可以为该关系生成另一个唯一键。
在这里阅读更多相关信息: http://learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/