2012-02-06 22 views
4

特定のコードと最初の関係の周りを頭で囲むのに問題があります。 Group、User、GroupPermissionという3つのエンティティがあります。 GroupPermissionエンティティは、グループに関連するパーミッションに関する情報を保持します。リーダー、エディタ、ユーザーの3つのアクセス許可があります。 GroupPermissionテーブルには、主キーIDとアクセス許可の名前を含める必要があります。それから、私はIdle - Group_Id - User_Username - GroupPermission_Idのような関係テーブルが必要です。複数のグループ、複数のユーザー、複数のアクセス許可があります。私は単一の関係テーブルを作るのに役立つ多くの例を持っていますが、複数の関係を含むものは何も見つかりません。EF 4.1コード最初に複数の多対多の関係

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 
    } 
} 

ここ

は私のエンティティが...

ユーザーです、私はGroを得るId、Name、GroupId、およびUserIdを持つupPermissionsテーブル。この表はIDと名前でなければなりません。 GroupPermissions_IdとUser_Usernameを保持するGroupPermissionUsersテーブルを作成します。これは、Id、Group_Id、User_Username、GroupPermission_Idでなければならないテーブルです。

誰かがこれを達成するためのヒントを持っているのですか、これについての誤った考え方はありますか?

答えて

3

このような場合、追加エンティティがありません。

IdNameの新Permissionエンティティ:

UsersGroupsPermissions間ジャンクションテーブルを形成する GroupPermissionエンティティを修正
public class Permission 
{ 
    [Key] 
    public int Id { get; set; } 
    [StringLength(EntityLength.GenericLength)] 
    public string Name { get; set; } 

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

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; } 
} 
+0

私は正確にこれを書いた(とそれは次のようになります。あなたがこれを提出し、それが働いているようだ。私は余分な存在なしにこれをやろうとしていたが、私は間違っていると思った。私の疑惑を確認していただきありがとうございます。私は何かが欠落していると思ったが、それは私に複数のGoogle検索と週末にそれが私を打つようになった。 – snoluet

関連する問題