2

似乎是在那裏幾乎沒有任何例子所以這裏有雲:亞音速3 - 簡單的存儲庫,並創建一個外鍵

這裏是我的三個結構,但它似乎並沒有正確地創建表,當我打電話下面一行它說,標識不識別:

IEnumerable<Permission> permissions = _data.Find<RolePermission>(x => x.Role.RoleKey == roleKey).Select(x => x.Permission); 

RolePermission:

public class RolePermission 
{ 

    [SubSonicPrimaryKey] 
    public int RolePermissionId { get; set; } 

    public int RoleId { get; set; } 
    public int PermissionId { get; set; } 

    //Foreign Key of Role 
    public Role Role { get; set; } 

    //Foreign key of Permission 
    public Permission Permission { get; set; } 

} 

權限:

public class Permission 
    { 

     [SubSonicPrimaryKey] 
     public int Id { get; set; } 
     [SubSonicLongString] 

     public string PermissionKey { get; set; } 
     [SubSonicLongString] 
     public string PermissionDescription { get; set; } 

    } 

角色:

public class Role 
    { 

     [SubSonicPrimaryKey] 
     public int Id { get; set; } 

     [SubSonicLongString] 
     public string RoleKey { get; set; } 

     [SubSonicLongString] 
     public string RoleDescription { get; set; } 

    } 

回答

1

我不知道這是否已被固定在當前版本中,但我記得在亞音速的主鍵檢測一個愚蠢的錯誤。

  • 如果您的Object包含名爲Id subsonic的屬性,則假定這是您的主鍵。
  • 如果不是,你必須通過裝飾屬性SubSonicPrimaryKey屬性(如你所做的)來告訴亞音速。
  • 如果您有一個名爲Id的屬性,並且它也用屬性(比如您的Role和Permission類)進行了修飾,subsonic會查找屬性兩次,而不檢查它們是否都相等。然後它會拋出一個異常,因爲它不能可靠地確定要採取哪一個。

長話短說,你應該嘗試:

一)從您的ID列刪除屬性

B)重命名屬性角色ID或PermissionId(這將是更consistend因爲你RolePermission類有它的PK稱爲RolePermissionId)

如果這沒有幫助,請提供一個堆棧跟蹤。

+0

+1對於回答將稍後嘗試並讓您知道 – Andrew 2010-11-25 11:42:38