gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:38:26 25 4
gpt4 key购买 nike

我在处理某种代码优先关系时遇到了麻烦。我有三个实体:组、用户、组权限。 GroupPermission 实体保存有关与组相关的权限的信息。共有三种权限:leader、editor、user。 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; }
}

组权限:
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
}
}

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

有没有人有任何提示来实现这一点,或者我是否错误地考虑了这个设计?

最佳答案

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

新品 Permission实体与 IdName :

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

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

已修改 GroupPermissionUsers之间形成联结表的实体, GroupsPermissions :
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; }
}

关于asp.net-mvc-3 - EF 4.1 Code First 多重多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9163453/

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