2016-08-27 132 views
0

繼續我的previous question,接受的答案完美工作。
不過,我只是想在我的數據庫中的幾個角色,說:將角色映射到靜態值

表:角色

Id | Role 
--------------- 
1 | AccountOwner 
2 | AccountAdmin 
3 | AccountUser 

在提問接受的答案在角色每次創建一個新的行用戶已註冊帳戶。有什麼方法可以請求身份系統使用數據庫中的現有角色?考慮到代碼:

public static async Task<bool> AddAccountAsync(this MyContext context, MyModel model) 
{ 
    try 
    { 
     Role role = new Role(TrackerRole.Owner); 
     Account account = new Account(model.AccountCurrency, model.AccountName, model.Description); 
     UserAccount uc = new UserAccount 
     { 
      User = model.User, 
      Account = account, 
      Role = role 
     }; 
     account.UserAccounts.Add(uc); 
     context.Accounts.Add(account); 
     await context.SaveChangesAsync(); 

     model.User.UserAccounts.Add(uc); 
     return true; 
    } 
    catch (DbUpdateException ex) 
    { 
     // LOG 
    } 
    return false; 
} 

如果可能的話,我想完全刪除,角色類,並用它替換枚舉。

+0

如果您想將其替換爲枚舉,則不再需要角色實體,就像數據庫中的角色表一樣。只要Role屬性的類型爲Role(枚舉),它將作爲一個int持續到數據庫。 但是,如果您需要更新代碼以添加其他未來角色,則會導致設計缺陷。 –

+0

@stefchri所有角色已被考慮在內,因此可能會有效 –

回答

0

如果要將其替換爲枚舉,則角色實體不再需要,因爲角色表在數據庫中也是如此。只要Role屬性的類型爲Role(枚舉),它將作爲一個int持續到數據庫。但是,如果您需要更新代碼以添加其他未來角色,則會導致設計缺陷。

關於只有三個角色,並且不必每次都添加它們: 從db(var role = Context.Roles.Where(...).FirstOrDefault())中獲取正確的角色,並將其放入useraccount的role屬性中。這樣你就可以確定所有的UAC都會指向角色的正確實例。

+0

謝謝,這項工作非常完美。但是,我想知道如何完全刪除角色類,因爲身份系統需要一個「角色」類 –

+0

完全放棄它我認爲是不可能的。查看問題和答案http://stackoverflow.com/questions/38612771/is-it-possible-to-save-a-role-with-enum-parameter-using-identity –

+0

我決定只留下角色類爲空,使RoleStore'爲每個方法拋出新的NotImplementedException',謝謝 –