实体框架c #eager加载继承和嵌套属性

时间:2015-01-07 08:46:36

标签: c# entity-framework inheritance

我有一个以下对象作为项目中的模型:

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”不满意。

0 个答案:

没有答案