加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – EF 4.1 Code First多个多对多关系

发布时间:2020-12-16 09:50:41 所属栏目:asp.Net 来源:网络整理
导读:我无法绕过某个代码优先关系.我有三个实体:Group,User,GroupPermission. GroupPermission实体保存有关与组相关的权限的信息.有三种权限:领导者,编辑者,用户. GroupPermission表应包含主键ID和权限名称.然后我想要一个看起来像这样的关系表:Id – Group_Id
我无法绕过某个代码优先关系.我有三个实体:Group,User,GroupPermission. GroupPermission实体保存有关与组相关的权限的信息.有三种权限:领导者,编辑者,用户. GroupPermission表应包含主键ID和权限名称.然后我想要一个看起来像这样的关系表:Id – Group_Id – User_Username – GroupPermission_Id.可以有多个组,多个用户,多个权限.我有很多例子可以帮助我创建一个单独的关系表,但我找不到任何包含多个关系的东西.

这是我的实体……

用户:

public class User
{
    [Key,StringLength(EntityLength.UsernameLength)]
    public string Username { get; set; }
    [Required,StringLength(EntityLength.NameLength)]
    public string FirstName { get; set; }
    [Required,StringLength(EntityLength.NameLength)]
    public string LastName { get; set; }
    [Required,StringLength(EntityLength.Email)]
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime DateCreated { get; set; }

    public virtual UserPermission UserPermission { get; set; }
    public virtual ICollection<Group> Groups { get; set; }
    public virtual ICollection<Project> Projects { get; set; }
    public virtual ICollection<Issue> Issues { get; set; }
    public virtual ICollection<GroupPermission> GroupPermissions { get; set; } 

    public string FullName
    {
        get { return FirstName + ' ' + LastName; }
    }
}

组:

public class Group
{
    [Key]
    public int Id { get; set; }
    [Required,StringLength(EntityLength.GenericLength)]
    public string Name { get; set; }
    [Required,StringLength(EntityLength.DescriptionLength)]
    public string Description { get; set; }

    public virtual ICollection<User> Users { get; set; }
    public virtual ICollection<Project> Projects { get; set; }
    public virtual ICollection<GroupPermission> GroupPermissions { get; set; }
}

GroupPermission:

public class GroupPermission
{
    [Key]
    public int Id { get; set; }
    [StringLength(EntityLength.GenericLength)]
    public string Name { get; set; }

    public int GroupId { get; set; }
    public virtual ICollection<Group> Groups { get; set; }
    public int UserId { get; set; }
    public virtual ICollection<User> Users { get; set; }

    public enum Permission
    {
        Leader = 1,Editor = 2,User = 3
    }
}

当使用此结构创建表时,我得到一个具有Id,Name,GroupId和UserId的GroupPermissions表.此表只需要Id和Name.然后,它创建一个GroupPermissionUsers表,其中包含GroupPermissions_Id和User_Username.这是应该是Id,Group_Id,User_Username,GroupPermission_Id的表.

有没有人有任何提示来完成这个或我是否正在考虑这个错误的设计?

解决方法

在这种情况下,您缺少其他实体.它应该看起来像:

具有Id和Name的新Permission实体:

public class Permission
{
    [Key]
    public int Id { get; set; }
    [StringLength(EntityLength.GenericLength)]
    public string Name { get; set; }

    public virtual ICollection<GroupPermission> GroupPermissions { get; set; }
}

修改了GroupPermission实体以在用户,组和权限之间形成联结表:

public class GroupPermission
{
    [Key]
    public int Id { get; set; }

    public int GroupId { get; set; }
    public virtual Group Group { get; set; }

    public string UserName { get; set; }
    [ForeignKey("UserName")]
    public virtual User User { get; set; }

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读