gpt4 book ai didi

entity-framework-4 - Entity Framework 多对多查询 : navigation property not generated

转载 作者:行者123 更新时间:2023-12-04 07:58:24 24 4
gpt4 key购买 nike

我有两张 table UserUserRole它们是使用链接表连接的UserInRole
当我生成实体模型时,出于某种原因,实体UserInRole没有被生成。而且从图中可以看出,Entity Framework 理解 User 之间存在多对多关系。和 UserRole :

enter image description here

我需要像这样实现查询

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

但是 Entity Framework 不生成 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[]'有任何想法吗?

最佳答案

你不需要那个链接表 在您的 EF 模型中!这就是EF的魅力!!

检查您的实体 User - 它有一个 UserRoles导航属性 - 这是该用户所在的所有角色的集合。

checkout 实体UserRole :它有一个导航属性 Users其中包含具有此角色的所有用户。

使用这两个多值导航属性,您可以表达您可能想要的任何查询:

  • 查找给定角色的所有用户(查找 UserRole 实体并枚举其 .Users 属性)
  • 查找给定用户的所有角色(找到 User 并枚举其 .UserRoles )

  • EF 和 EDM 对您“隐藏”了该链接表 - 当您在概念模型中表达您的意图时,您实际上并不需要它;这些链接表只是关系数据库中的“必要之恶”,因为这些数据库无法以任何其他方式对 m:n 关系进行建模。

    更新:所以你似乎想找到一个特定用户所在的所有用户角色(他们的名字)的列表 - 你可以这样表达:
    // find the user in your "dbContext" (or via your repository)
    var user = _dbContext.Users.FirstOrDefault(u => u.Name == "magename");

    // from the list of UserRoles on that user, select the names only
    var userRolesNames = user.UserRoles.Select(ur => ur.Name).ToList();

    关于entity-framework-4 - Entity Framework 多对多查询 : navigation property not generated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847281/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com