EF 4.1コード最初に複数の多対多の関係

私は、特定のコードと最初の関係の周りに私の頭をラップするのに問題があります。 Group、User、GroupPermissionという3つのエンティティがあります。 GroupPermissionエンティティは、グループに関連するパーミッションに関する情報を保持します。リーダー、エディタ、ユーザーの3つのアクセス許可があります。 GroupPermissionテーブルには、主キーIDとアクセス許可の名前を含める必要があります。それから、私はIdle - 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 Groups { get; set; }
    public virtual ICollection Projects { get; set; }
    public virtual ICollection Issues { get; set; }
    public virtual ICollection 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 Users { get; set; }
    public virtual ICollection Projects { get; set; }
    public virtual ICollection 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 Groups { get; set; }
    public int UserId { get; set; }
    public virtual ICollection Users { get; set; }

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

この構造を使用してテーブルを作成すると、Id、Name、GroupId、およびUserIdを持つGroupPermissionsテーブルが取得されます。この表はIDと名前でなければなりません。 GroupPermissions_IdとUser_Usernameを保持するGroupPermissionUsersテーブルを作成します。これは、Id、Group_Id、User_Username、GroupPermission_Idでなければならないテーブルです。

誰かがこれを達成するためのヒントを持っているのですか、これを間違って考えていますか?

4

1 答え

そのような場合、追加エンティティが不足しています。それは次のようになります:

Id Name の新しい Permission エンティティ:

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

    public virtual ICollection GroupPermissions { get; set; }
}  

Users Groups 、および Permissions の間にジャンクションテーブルを作成するように変更された 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; }
}
3
追加された
私はあなたがこれを提出し、それが働いているように私のプロジェクトにこの正確な(手紙に)解決策を書いた。私は余分な存在なしにこれをやろうとしていたが、私は間違っていると思った。私の疑惑を確認していただきありがとうございます。私は何かが不足していると思ったが、それは私に複数のGoogle検索と週末が私をヒットさせるのにかかった。
追加された 著者 snoluet,