继承与引用我的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?所以任何人都可以请这样吗?
感谢
IValidatableObject是一个接口,所以你可以使用:
public class ServerJoin : GeneralClass, IValidatableObject
{
...
}
我不知道这是有道理的,从一个视图模型的观点。我通常在我的实体模型中进行继承,然后在我的ViewModels中将事情弄平。
但你如何做你的实体模型内的继承?现在我遵循数据库第一种方法,在那里我使用EF来映射我的DB表,并且我从来没有在我的自动生成的模型类中获得任何类型的继承..我的意思是EF似乎总是遵循继承的组合,第一种方法......不知道如何在下面的代码第一种方法时工作。 –
您需要删除关系并添加继承。在这里看到:https://www.packtpub.com/books/content/entity-framework-db-first-%25E2%2580%2593-inheritance-relationships-between-entities为您的链接 –
好,谢谢,,所以我的问题是否我会得到任何优势,如果我修改如何EF映射我的表具有类似继承的模型类?或者用EF来映射模型类的方式工作很好? –
EF将处理继承或组合物。您需要确定ServerJoin“是”GeneralClass(继承)还是ServerJoin“具有”GeneralClass(组合)“。 http://www.w3resource.com/java-tutorial/inheritance-composition-relationship.php –
@SteveGreene我需要它是“是”,但不知道如何我会延长我的serverjoin在这种情况下,它已经扩展IValidatableObject ? –