如何首先在EF代码中建立模型与枚举之间的多对多关系?

Plantain Yao

例如:

public class Role
{
    public Role()
    {
        Permissions = new HashSet<Permission>();
    }

    public string ID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Permission> Permissions { get; set; }
}

public enum Permission
{
    UserManagement = 0,
    DepartmentManagement = 1,
    RoleManagement = 2,
    ModifyPassword = 3
}

通常,在一个模型和另一个模型之间,我可以编写两个导航属性。但是对于这种情况,我无法在枚举中编写导航属性。

凯尔

你能做这样的事情吗?

[Flags]
public enum Permission
{
    UserManagement = 1,
    DepartmentManagement = 2,
    RoleManagement = 4,
    ModifyPassword = 8
}

public class Role
{
    public string ID { get; set; }
    public string Name { get; set; }
    public Permission Permissions { get; set; }
}

然后,例如:

var role = new Role();
//assign multiple values
role.Permissions = Permission.UserManagement | Permission.ModifyPassword;
//add a value
role.Permissions |= Permission.DepartmentManagement;
//remove a value
role.Permissions &= ~Permission.DepartmentManagement;
//test for a value
bool hasPermission = (role.Permissions & Permission.ModifyPassword) != 0;

警告:

可能考虑公开一些方法,例如RemovePermission(...)AddPermission(...)等等,如果有人按位操作不当,将很难引入一个非常重要的错误。

除非有性能方面的要求,否则我可能只是将权限设置为一个类并承担额外的开销。

一些阅读:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何首先在代码中定义两个实体之间的多对多和一对多关系?

首先在EF6代码中创建多对多关系

首先在EF代码中设计一对多关系的最佳实践

如何首先在实体框架6代码中创建可为空的一对多关系

首先在EF代码中删除列

如何首先在asp.net核心中的代码中创建关系

EF例外,如何首先在C#和实体框架代码中为地址建模

如何首先在EF6代码中设置唯一属性

如何首先在代码中获得具有外键关系的子实体中的父实体属性?

EF代码首先建立一对多关系

在自身模型中建立多对多关系

首先自引用多对多关系EF代码

首先在模型存储库MVC 4代码中验证会话变量

如何首先在代码中保存外键的集合

首先在Entity Framework代码中链接子表

如何在同一两个模型之间建立多对多关系?

如何首先在实体框架代码中的 linq 中使用可为空列表?

如何首先在Entity Framework代码中为Identity主键设置起始值?

首先在同一张表中启用Entity Framework 5代码中的多对多

如何使用Google的Firestore建立多对多关系模型

如何首先在EF 7代码中使用数据注释指定唯一键

多个外键EF Core 2.1代码首先在数据库中仅生成1

如何首先在Wicket中呈现<meta>标签?

如何从首先在php中重新启动循环

在Django中,如何保存对象并建立多对多关系后如何运行代码?

如何在Ruby on Rails中的模型之间建立一对多关系?

在ddd上建立多对多关系模型

Django建立多对多关系模型

EF代码首先在我定义的代码旁边添加它自己的FK