【问题标题】:How to perform a simple query on a join table when the join table is created by EF?EF创建联表时如何对联表进行简单查询?
【发布时间】:2021-07-23 13:33:08
【问题描述】:

假设我有两个具有多对多关系的实体并手动创建连接表:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<UserPermission> UserPermissions { get; set; }
}

public class Permission
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<UserPermission> UserPermissions { get; set; }
}

public class UserPermission
{
    public int UserId { get; set; }
    public User User { get; set; }

    public int PermissionId { get; set; }
    public Permission Permission { get; set; }
}

如果我想知道用户是否有特定权限,我可以运行这样的简单查询

var query = _context.UserPermissions
    .Where(up => up.UserId == userId && up.PermissionId == permissionId);

现在说我删除连接表并让实体框架为我创建它:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Permission> Permissions { get; set; }
}

public class Permission
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<User> Users { get; set; }
}

如何在数据库上执行同样的简单查询,而不需要引入大量不必要的数据或使查询过于复杂?

【问题讨论】:

    标签: c# entity-framework-core ef-core-5.0


    【解决方案1】:

    EF 将为您创建 UserPermissions。请在以下LINK

    找到

    【讨论】:

    • 我知道,但这不是问题。
    • 最简单的解决方案是使用“UserPermissions”表。另一种解决方案是在 User 表中添加一个 json 字段(Permissions)并使用“EF.Functions”进行查询 Example here stackoverflow.com/questions/68439395/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2016-11-21
    • 2012-12-07
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多