1

我工作的一個asp.net MVC Web應用程序內的其他類。和我已經定義許多視圖模型類,其中參考單獨的模型類從不同的來源如下,因爲它們加入被不同DB表內定義的單獨的模型類(其中,i與單詞「加入」後綴這些類): -繼承與引用我的asp.net MVC與實體框架應用

public class ServerJoin : IValidatableObject 
{ 
    public Server Server { get; set; } 
    public Resource Resource { get; set; } 
    public Technology Technology { get; set; } 
    public SDOrganization Site { get; set; } 
    public SDOrganization Customer { get; set; } 
    public NetworkInfo NetworkInfo { get; set; } 
    public ICollection<NetworkInfo> NetworkInfo2 { get; set; } 
    [Display(Name="Unique")] 
    public bool IsMACUnique { get; set; } 
    [Display(Name = "Unique")] 
    public bool IsIPUnique { get; set; } 
    public Nullable<double> SPEED { get; set; } 
    public Nullable<Int64> PROCESSORCOUNT { get; set; } 
    [Display(Name = "IP Unique")] 
    public bool IsTIPUnique { get; set; } 
    [Display(Name = "MAC Unique")] 
    public bool IsTMACUnique { get; set; } 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if (Server != null) 
     { 


      if (Server.RackUnitID != null && Server.RackID == null) 
      { 
       yield return new ValidationResult("Please select a Rack, or remove the current Rack Unit", new[] { "Server.RackUnitID" }); 
      } 
     } 
    } 

} 

&另一視圖模型類: -

public class VMJoin 
{ 
    public VirtualMachine VirtualMachine { get; set; } 
    public Resource Resource { get; set; } 
    public Technology Technology { get; set; } 
    public SDOrganization Site { get; set; } 
    public SDOrganization Customer { get; set; } 
    public NetworkInfo NetworkInfo { get; set; } 
    public ICollection<NetworkInfo> NetworkInfo2 { get; set; } 
    public ICollection<TechnologyIP> TechnologyIP { get; set; } 
    [Display(Name = "Unique")] 
    public bool IsMACUnique { get; set; } 
    [Display(Name = "Unique")] 
    public bool IsIPUnique { get; set; } 
    public Nullable<double> SPEED { get; set; } 
    public TechnologyIP TechnologyIP2 { get; set; } 
    [Display(Name = "IP Unique")] 
    public bool IsTIPUnique { get; set; } 
    [Display(Name = "MAC Unique")] 
    public bool IsTMACUnique { get; set; } 

} 

現在我想定義所有視圖模型,這個一般類共享的類屬性,用於調用外部API的類看起來如下: -

public class GeneralClass 
{ 
    public string ResourceName { get; set; } 
    public string ResourceDesc { get; set; } 
    public string ResourceType { get; set; } 
} 

現在我不知道我怎麼可以參考視圖模型裏面這個類。我正在尋找一種方法來將此類定義爲父類,並強制其他類(serverjoin & vmjoin)擴展此GeneralClass ?.另一個選項(模仿Entity框架如何管理類)僅僅是添加了ServerJoin中的GeneralClass的引用VMjoin?所以任何人都可以請這樣嗎?

感謝

+0

EF將處理繼承或組合物。您需要確定ServerJoin「是」GeneralClass(繼承)還是ServerJoin「具有」GeneralClass(組合)「。 http://www.w3resource.com/java-tutorial/inheritance-composition-relationship.php –

+0

@SteveGreene我需要它是「是」,但不知道如何我會延長我的serverjoin在這種情況下,它已經擴展IValidatableObject ? –

回答

0

IValidatableObject是一個接口,所以你可以使用:

public class ServerJoin : GeneralClass, IValidatableObject 
{ 
    ... 
} 

我不知道這是有道理的,從一個視圖模型的觀點。我通常在我的實體模型中進行繼承,然後在我的ViewModels中將事情弄平。

+0

但你如何做你的實體模型內的繼承?現在我遵循數據庫第一種方法,在那裏我使用EF來映射我的DB表,並且我從來沒有在我的自動生成的模型類中獲得任何類型的繼承..我的意思是EF似乎總是遵循繼承的組合,第一種方法......不知道如何在下面的代碼第一種方法時工作。 –

+0

您需要刪除關係並添加繼承。在這裏看到:https://www.packtpub.com/books/content/entity-framework-db-first-%25E2%2580%2593-inheritance-relationships-between-entities爲您的鏈接 –

+0

好,謝謝,,所以我的問題是否我會得到任何優勢,如果我修改如何EF映射我的表具有類似繼承的模型類?或者用EF來映射模型類的方式工作很好? –