源分享网正式开通,我们为大家提供免费资源,欢迎大家踊跃投稿!

为什么我的C# Entity Framework项目报错:“缺少列:Discriminator on entity”?

代码编程 橘子, 茉莉 2个月前 (06-07) 132次浏览 0个评论 扫描二维码

C# Entity Framework (EF) 是一个强大的对象关系映射(ORM)框架,它简化了与数据库的交互。但是,有时你可能会遇到一些错误,例如:“缺少列:Discriminator on entity”。

为什么我的C# Entity Framework项目报错:“缺少列:Discriminator on entity”?

为什么会出现这个错误?

在Entity Framework中,当你使用继承来建模你的数据模型时,EF会默认为每个派生类型添加一个名为“Discriminator”的列。这个列用于跟踪每个对象的实际类型,以便在查询时正确地将其实例化为适当的子类。但是,当出现“缺少列:Discriminator on entity”的错误时,这意味着EF在查询时无法找到这个Discriminator列,因此无法正确地识别对象的类型。

解决方法:

  1. 检查数据模型: 首先,确保你的数据模型正确地定义了继承关系。例如,你是否使用了EF的Table Per Hierarchy (TPH)、Table Per Type (TPT) 或 Table Per Concrete Type (TPC) 等继承策略?如果是,请确保每个派生类都正确地继承自基类,并且在模型中正确地配置了继承关系。
  2. 使用Fluent API: 如果你使用的是Code First开发模式,并且采用了Fluent API配置你的数据模型,确保在配置派生类型时正确地指定了Discriminator列。例如:
    csharp

    modelBuilder.Entity<DerivedType>()
    .Map(m =>
    {
    m.MapInheritedProperties();
    m.ToTable(“DerivedTypeTableName”);
    m.Requires(“Discriminator”).HasValue(“DerivedType”);
    });

    这将确保在查询时正确地识别DerivedType的实例。

  3. 手动添加Discriminator列: 如果你的模型配置正确但仍然遇到问题,你可以尝试手动向你的数据表中添加一个Discriminator列。你可以通过迁移或直接在数据库中添加该列。确保列的类型为字符串,并为每个派生类型指定一个唯一的值,以便EF能够正确地识别对象类型。
  4. 检查数据库架构: 最后,确保你的数据库架构与你的数据模型相匹配。如果你手动创建了数据库表,确保每个表中都包含了Discriminator列,并且列的类型与模型中的配置相匹配。

在C# Entity Framework项目中出现“缺少列:Discriminator on entity”的错误可能是由于数据模型的配置问题所致。通过仔细检查数据模型、使用Fluent API进行配置、手动添加Discriminator列或检查数据库架构,你可以解决这个问题并确保你的应用程序正常运行。记住,在处理Entity Framework错误时,仔细阅读错误消息并逐步排除可能的原因是非常重要的。


本站资源均来源于互联网,仅限于学习研究,严禁从事商业或者非法活动!丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:为什么我的C# Entity Framework项目报错:“缺少列:Discriminator on entity”?
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
热血江湖私发网 魔兽sf 热血江湖私服 热血江湖私服 热血江湖私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 热血江湖私服 热血江湖私服 热血江湖私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 诛仙私服 热血江湖私服 热血江湖私服 热血江湖私服 热血江湖sf 热血江湖私发网 热血江湖私发网 热血江湖私发网 热血江湖私发网