2014-10-17 45 views
-1

我有一個控制器,用於檢查經過身份驗證的用戶的角色。基於它需要創建一個類的實例的角色。例如,如果角色是「學生」,我需要創建一個Student類的實例。我一直在嘗試這樣的事情,但它不起作用:在MVC中創建未知類型的實例並使用它

private object CurrentUser; 

switch(Role) 
{ 
    case "student": 
    CurrentUser = context.Students.FirstOrDefault(std => std.UserId == WebSecurity.CurrentUserId); 
    break; 
    . 
    . 
    . 
} 

但我無法獲得學生屬性的定義。例如,當我想要獲得CurrentUser時,沒有這樣的firstname屬性可用! 我該如何植入CurrentUser

+2

不知道爲什麼4人投票決定關閉爲「不清楚你在問什麼。」他將'Student'的實例分配給'object'類型的變量,並不理解爲什麼'Student'的屬性不可用。 – 2014-10-17 20:22:57

回答

2

您已將CurrentUser定義爲object。除非你施放它,否則它不會擁有Student的屬性。

private object CurrentUser; 

您可以使用接口或公共基類,例如,

public class Person 
{ 
    public string FirstName { get; set; } 
} 

public class Student : Person 
{ 
    // Add special properties for students 
} 

public class Professor : Person 
{ 
    // Add special properties for professors 
} 

然後使用

private Person CurrentUser; 

所有以Person提供的屬性將可在CurrentUser。如果您需要訪問一個屬性,僅在Student,你可以施放這樣的:

((Student)CurrentUser).SomePropertyOfStudent 
+0

謝謝埃裏克。我也使用學生類作爲EF第一個代碼來使用我的數據庫。使用基類不影響我的數據庫? – Mohammadalijf 2014-10-17 20:31:18

+1

EF代碼首先完全支持基類(或實際上是整個類的層次結構)。見http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph – 2014-10-17 20:32:19

相關問題