我无法绕过某个代码优先关系.我有三个实体: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; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。