首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在处理继承时避免在EF核中使用鉴别器

在处理继承时避免在EF核中使用鉴别器
EN

Stack Overflow用户
提问于 2021-03-03 12:28:59
回答 1查看 2.8K关注 0票数 1

从EF转换到EF核心(3.1)后开始出现问题。

我有一个基类抽象类和一个派生类,它们是在运行时动态创建的(使用反射)。

基本类型的实体配置是(、EF、):

代码语言:javascript
运行
复制
        ToTable("TableName", "dbo");
        HasKey(t => t.Id);

        HasRequired(t => t.prop1).WithMany().HasForeignKey(t => t.prop1);
        Property(t => t.prop2).IsRequired();
        Property(t => t.prop3).IsRequired();

我用这个配置构建了基类,用modelBuilder.Entity(type)构建了动态类。一切都很顺利。我可以使用context.Objects获取基类的实例,使用Activator.CreateInstance(type)获取动态类的实例。

现在我有了相同的配置,但对于EF核心

代码语言:javascript
运行
复制
        builder.ToTable("TableName", "dbo");
        builder.HasKey(t => t.Id);

        builder.HasOne(t => t.prop1).WithMany().HasForeignKey(t => t.prop1);
        builder.Property(t => t.prop2).IsRequired();
        builder.Property(t => t.prop3).IsRequired();

但是在EF中,从上下文中获取对象会出现“无效列名‘鉴别器’”错误。是的,我的表中没有区分器列(显然在使用TPH模式时它是必需的),但是它在EF中没有很好的工作。在这种情况下,EF是如何处理继承的?此外,创建这样的列并使用相同的数据(派生类名)填充它似乎是无用的。感觉应该有我错过的东西。

那么,我的问题是:有什么方法可以解决这个问题而不创建一个判别器列呢?

EN

回答 1

Stack Overflow用户

发布于 2021-03-03 13:09:05

默认的EF通常会传递到EF,没有太多的问题,但是两者之间的自定义选项是不同的,例如,在核心中,我们现在可以很容易地通过fluent符号操纵鉴别器:https://www.learnentityframeworkcore.com/configuration/fluent-api/hasdiscriminator-method

检查基类是否是抽象的:https://stackoverflow.com/a/34646164/1690217

如果基类是https://www.learnentityframeworkcore.com/inheritance/table-per-hierarchy#configuration,则必须手动配置Discriminator列:

还请检查您以前的EF迁移中的数据库模式是否确实有Discriminator列,并且它是一个字符串类型,实际值应该是类型的名称,但是您可能已经在其他地方配置或应用了覆盖默认行为的约定(无论是在EF还是EF实现中)。

如果将实际模式包含在数据库中或构建表的迁移条目中,则可能会得到更明确的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66457096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档