我有一个以下对象作为项目中的模型:
AbstractControll和AntivirusControll,它继承自AbstractControll。
public class AntivirusControll: AbstractControll
AnticvirusControll具有属性:
public List<Exclusion> Exclusions { get; set; }
这段代码让我变得狡猾:
var a = _entities.AntivirusControlls.First(m => m.Id == 1);
var b = _entities.AbstractControlls.First(m => m.Id == 1);
在数据库中AnticvirusControll有一个例外,而执行上面代码的结果我得到: a.Exclusions - 有一个对象(这很好,没问题) b.Exclusions - 没有!
它甚至被称为继承?它不是多态的,它是......我能说的一个错误。在这种情况下,延迟加载不会起作用。 在询问AbstractControlls时,我不能包含派生类课程中的任何属性。
任何想法如何解决?
- 编辑 两个班级;
public abstract class AbstractControll
{
public int Id { get; set; }
}
public abstract class AbstractControll
{
public int Id { get; set; }
}
public class AntivirusControll: AbstractControll
{
public class Exclusion
{
public int Id { get; set; }
[DataMember]
[Display(Name = "Object Type")]
public String ObjectType { get; set; }
[DataMember]
[Display(Name = "Object Type")]
public String ObjectName { get; set; }
[DataMember]
public ConfigurationItemDescription ExlusionCI { get; set; }
}
[Display(Name= "Is Antyvirus Enabled")]
[DataMember]
public bool? isAntyvirusEnabled { get; set; }
[DataMember]
public ConfigurationItemDescription isAntyvirusEnabledCI { get; set; }
[DataMember]
[Display(Name = "Is real time protection enabled")]
public bool? isRealTimeProtectionEnabled { get; set; }
[DataMember]
public ConfigurationItemDescription isRealTimeProtectionEnabledCI { get; set; }
[DataMember]
[Display(Name = "Virus definition not older than( in days)")]
[Required]
[Range(typeof(int),"1","365")]
public int? VirusDefinitionNotOlderThen { get; set; }
[DataMember]
public ConfigurationItemDescription VirusDefinitionNotOlderThenCI { get; set; }
[DataMember]
public List<Exclusion> Exclusions { get; set; }
public AntivirusControll()
{
isAntyvirusEnabled = true;
isRealTimeProtectionEnabled = true;
VirusDefinitionNotOlderThen = 7;
isAntyvirusEnabledCI = new ConfigurationItemDescription();
isRealTimeProtectionEnabledCI = new ConfigurationItemDescription();
VirusDefinitionNotOlderThenCI = new ConfigurationItemDescription();
Exclusions = new List<Exclusion>();
}
}
- 编辑2 嗯......我想澄清一下,我正在做什么。 我有MVC +角度应用程序。 有一个带有一些控件的文档(AbstractControll) 它们中的每一个都是特定类型,例如:防病毒,加密等。在这一点上,我有大约20个,但我可能会更多。大多数派生类都有内部类,如Antivirus中的Exceptions 对。 基本就是这样。什么是重要的 - 在获得“AbstractControll”之后我想通过webapi公开这个对象 - 所以延迟加载在这里不适用(或者它可能是?) 而已。它运行时我不知道控件的exat类型,因此当在DbSet上操作时,我不能包含来自例如“Antivirus”的属性
我现在所拥有的是丑陋的,如果它的块返回propper对象并包含所有内容,但我对他的“hack”不满意。