假设,我有数据表示的主类,这个类有配置字段.该字段必须能够回答与主类相关的一些问题(假设这是一个问题 – ‘IsMainClassReadyToUse’).但是这个阶级的内部结构可能会有所不同.
因此,我想创建抽象类Configurator并根据情况使用各种实现其功能的Configuratos.
public class SimpleConfigurator : Configurator { public int FieldA { get; set; } public override bool IsDataClassReadyToUse() { return ParentDataClass.FieldA == FieldA; } } public class ComplexConfigurator : Configurator { public virtual List<int> FieldsB { get; set; } public override bool IsDataClassReadyToUse() { return ParentDataClass.FieldsB.All(x => FieldsB.Any(y => y == x)); } } public abstract class Configurator { public int ConfiguratorId { get; set; } public virtual DataClass ParentDataClass { get; set; } public abstract bool IsDataClassReadyToUse(); } public class DataClass { public int DataClassId { get; set; } public virtual Configurator Configurator { get; set; } public int FieldA { get; set; } public virtual List<int> FieldsB { get; set; } } public class DataDbContext : DbContext { public DbSet<DataClass> DataClasses { get; set; } }
但是,当我尝试使用类型为ComplexConfigurator的Configurator的DataClass实例时,会出现问题.
由于LazyLoading,我需要从ComplexConfigurator加载FieldsB,但抽象类Configurator不包含这样的字段,我不能编写这样的代码:
new DataDbContext().DataClasses .Include(m => m.Configurator) .Include(m => m.Configurator.FieldsB);
我试图禁用LazyLoading,在DataDbContext中添加这样的构造函数:
public DataDbContext() { Configuration.LazyLoadingEnabled = false; }
但是当我尝试访问FieldsB时,它仍然是null.
那么,我如何使用Entity Framework实现这样的架构?
或许我应该为这样的任务选择另一种架构?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。