【发布时间】:2011-05-01 16:34:31
【问题描述】:
我有两个表User 和UserRole,它们使用链接表UserInRole 连接
当我生成实体模型时,由于某种原因,实体UserInRole 没有生成。而且从图中可以看出,Entity Framework 理解User 和UserRole 之间存在多对多关系:
我需要像这样实现查询
select ur.Name from [User] as u
inner join UserInRole uir on uir.UserId = u.Id
inner join UserRole ur on ur.Id = uir.UserRoleId
where u.Username = 'magename'
我正在使用通用存储库,如果存在导航属性,则查询将如下所示:
from u in repository.AsQueryable<User>()
join uir in repository.AsQueryable<UserInRole>() on u.Id equals uir.UserId
join ur in repository.AsQueryable<UserRole>() on uir.UserId equals ur.Id
where u.Username == userName
select ur.Name
但是实体框架不会生成UserInRoles 导航属性和相关的UserInRole 实体,那么问题是在这种情况下我应该怎么做?我应该删除UserInRole 和UserRole 之间的链接以在模型中生成实体UserInRole,还是有任何方法可以让我在上面描述的查询而不对数据库进行任何更改?
更新
看来我需要做类似的事情
stirng[] roles = (from u in repository.AsQueryable<User>()
where u.Username == userName
select ur.UserRoles.Select(x => x.Name)).ToArray<string>();
遇到错误Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.IEnumerable<string>>' to 'string[]' 有什么想法吗?
【问题讨论】:
-
您的问题是:您的 UPDATED 部分中的第一个选择将选择 用户列表 - 是否包含单个或多个用户不相关,但它是一个 用户列表 - 并从中选择用户角色的名称 - 所以你有一个数组列表,基本上 - 这就是错误告诉你的内容。