2012-12-02 49 views
0

我有3個實體在我的網站上有很多組合。外鍵表格地圖

我會創造後續的層次:

  1. 每個用戶都擁有的的UserRole收集。
  2. 每個用戶角色都有固定的PermissionRecords集合
  3. 每個PermissionRecord都有一個PermissionRecordPrivileges的fild,因用戶而異。

我想獲得用戶的權限(獲取permissionRecord和UserRole集合非常平凡)。 據我瞭解,我需要創建一個合併下列數據的表: 用戶ID,PermissionRecordId,PermissionPrivilegesId(即創建主鍵3個外鍵)

我怎樣才能做到這一點使用EF 5(或更早)?

代碼:

public class BaseEntity 
{ 
    public int Id { get; set; } 
} 
public class User:BaseEntity 
{ 
    public virtual ICollection<UserRole> UserRoles{get;set;} 
} 

public class UserRole:BaseEntity 
{ 
    public ICollection<PermissionRecord> PermissionRecords { get; set; } 
} 

public class PermissionRecord : BaseEntity 
{ 
    public PermissionRecordPrivileges Privileges { get; set; } 
} 

public class PermissionRecordPrivileges : BaseEntity 
{ 
    public bool Create { get; set; } 

    public bool Read { get; set; } 

    public bool Update { get; set; } 

    public bool Delete { get; set; } 

} 
+0

我只看到兩個重要的實體。你在尋找三元關係嗎? –

+0

我的不好 - 修正了代碼。 –

+0

仍然沒有得到你所問的。你想要一張桌子上的東西嗎?如果是這樣,不要。 –

回答

0

你必須創建的實體模型類像下面。

注:需要保持公約(命名和單數/複數)當您使用實體框架代碼首先。像下面

實體模型

public class UserRole 
{ 

    public int Id { get; set; } 

    public virtual ICollection<PermissionRecord> PermissionRecords { get; set; } 

} 


public class PermissionRecord 
{ 
    public int Id { get; set; } 

    public virtual PermissionRecordPrivilege PermissionRecordPrivilege { get; set; } 
} 


public class PermissionRecordPrivilege 
{ 

    public int Id { get; set; } 

    public bool Create { get; set; } 

    public bool Read { get; set; } 

    public bool Update { get; set; } 

    public bool Delete { get; set; } 

} 

您的想下面

PermissionRecordPrivileges 

Id   int NotNull 
Create  bit AllowNull 
Read   bit AllowNull 
Update  bit AllowNull 
Delete  bit AllowNull 


PermissionRecords 

Id        int NotNull 

PermissionRecordPrivilege_Id int NotNull 

UserRole_Id     int NotNull 


UserRoles 

Id   int NotNull 

我希望這將有助於you.Good運氣。

1

您的術語「創建表」有點令人困惑。一個表是一個數據庫對象。我假設你的意思是一個數據結構客戶端。收集User的權限,你可以這樣做:

var privileges = (from u in context.Users 
       from ur in u.UserRoles 
       from pr in ur.PermissionRecords 
       where u.UserId = id 
       select ur.Privileges).Distinct(); 

其中id是包含User一個變量的ID。

+0

謝謝你的回覆。我仍然沒有得到它 - 據我瞭解,我需要將模型翻譯爲反映userId和userRole的用戶權限的對象。實際權限依賴於3個字段。我如何將3個對象映射到一個表上? –

+0

所以你必須做'u.UserId = uid && ur.RoleId = roleId'? (我不知道屬性名稱)。 –

+0

只需要確定:我需要創建另一個對象,其中包含表Users,UserRoles,Permissions和Privileges的主鍵,其中3個第一個外鍵組合是新表的主鍵。獲取用戶權限是通過使用userId,userRoleId和permissionId作爲primaryKey獲取值來完成的。我對嗎? –