继承与引用我的asp.net MVC与实体框架应用

问题描述:

我工作的一个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 ? –

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来映射模型类的方式工作很好? –