2015-05-23 59 views
1

的子類,在我的模型,我有兩個類繼承ApplicationUser如何使用ApplicationUser

public class ApplicationUser : IdentityUser 
{ 
    [DataType(DataType.MultilineText)] 
    public string SelfIntroduction { get; set; } 
} 
public class Author : ApplicationUser 
{ 
    public ICollection<Paper> UploadedPapers { get; set; } 
} 
public class PCMember : ApplicationUser 
{ 
    public int? Quota { get; set; } 
    public ICollection<Topic> PreferredTopics { get; set; } 
} 

不過,我不能在控制器使用這兩個類。

[HttpPost] 
[Authorize(Roles = "PCMember")] 
public ActionResult FinishRegister(string userName, int[] selectedTopics) 
{ 
    var user = UserManager.FindByName(userName); 
    string x = ((PCMember)user).UserName; 
    // create topics 
    for (int i = 0; i < selectedTopics.Count(); i++) 
    { 
     Topic t = context.Topics.Find(selectedTopics[i]); 
     System.Diagnostics.Debug.Write(t.TopicName); 
    } 
    //System.Diagnostics.Debug.Write(selectedTopics); 
    return View(context.Topics.ToList()); 
} 

當我投用戶PCMember(其實這是),系統會告訴我

"Additional information: Unable to cast object of type 
'System.Data.Entity.DynamicProxies.ApplicationUser_XXX' to type 
'PaperReviewSystem.Models.PCMember'." 

這意味着我使用了錯誤的UserManager或其他什麼東西?

+0

這裏檢查http://stackoverflow.com/questions/27407251/extending-asp-net-identity-in-asp-net-mvc-5-application – GANI

+0

@barry,問題是我不能生成實例ApplicationUser的子類,而不是如何存儲它們。我爲我的用戶模型使用了TPH。如果我通過用戶名參數,我可以得到ApplicationUser但不是PCMember,這是我需要的。 – Alex

回答

0

我發現通過使定製的UserManager

public UserManager<Author> AuthorManager { get; private set; } 

public UserManager<PCMember> PCMemberManager { get; private set; } 

的解決方案(可能不是100%確定),然後我可以使用它。

PCMember user = PCMemberManager.FindByNameAsync(User.Identity.Name).Result; 

不過,我說的是不是100%肯定,因爲在我的AspNetUsers表的原因,爲用戶鑑別列是「ApplicationUser」,我改成了PCMember,那麼它的工作原理。

相關問題