加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在Entity Framework中使用继承类的字段

发布时间:2020-12-15 20:55:55 所属栏目:百科 来源:网络整理
导读:假设,我有数据表示的主类,这个类有配置字段.该字段必须能够回答与主类相关的一些问题(假设这是一个问题 – ‘IsMainClassReadyToUse’).但是这个阶级的内部结构可能会有所不同. 因此,我想创建抽象类Configurator并根据情况使用各种实现其功能的Configuratos.
假设,我有数据表示的主类,这个类有配置字段.该字段必须能够回答与主类相关的一些问题(假设这是一个问题 – ‘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的更多信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读