c# – 如何在Entity Framework中使用继承类的字段
假设,我有数据表示的主类,这个类有配置字段.该字段必须能够回答与主类相关的一些问题(假设这是一个问题 – ‘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实现这样的架构? 或许我应该为这样的任务选择另一种架构? 解决方法
我想你应该尝试访问你的配置器,如
((ComplexConfigurator)yourObject.Configurator).FieldsB 但我担心EF与List< int>有效.属性(当我尝试这样做时,我有时会失败)更好的方法是创建类选项和字段列表<选项>选项进入配置器而不是带有整数的List. 您还应该检查您的数据库方案(应该有一个带有idenitifator字段的表“Configurators”以及所有SimpleConfigurator和ComplexConfigurator的字段).可能是你应该添加DbSet< Configurator>进入你的DbContext定义. 您可以阅读此article以获取有关继承和EF的更多信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – Visual Studio在附加到进程时未加载模块
- ruby-on-rails – RubyInstaller 2.2.1和Rails – Rake无法
- Flex AIR 做一个类似QQ消息提示在系统托盘闪烁图标
- ios – 你能在UINavigationController中推送UITabBarContro
- ios – Xcode 6 GM iPhone 6模拟器 – 不正确大小的故事板出
- c# – 如何将两个不同的对象插入数据库,但检查它们是否已经
- 数位之墙的主题式汇整和机器自动聚合
- Using the Flex Compilers Flex编译器的使用 第一部分
- SQLITE机制
- 常用损失函数积累