首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EF Code First"无效的列名'Discriminator'"但没有继承

首先,我们需要了解EF Code First是什么。EF Code First是Entity Framework的一种开发模式,它允许开发人员通过编写代码来定义数据模型,而不是使用外部设计器或XML文件。这使得开发人员可以更加灵活地控制数据模型的结构和映射。

在这个问题中,我们遇到了一个错误:“无效的列名'Discriminator'”。这个错误表明在使用EF Code First时,程序试图访问一个名为“Discriminator”的列,但是这个列不存在或者定义不正确。

要解决这个问题,我们需要检查代码中的数据模型定义。我们可以尝试以下几种方法:

  1. 确保数据模型中定义了正确的列名。检查代码中的属性名称是否与数据库中的列名相匹配。如果它们不匹配,我们需要更新代码或数据库以使它们匹配。
  2. 如果我们使用了继承,确保映射正确。在继承的数据模型中,我们需要使用“Table-per-Hierarchy”(TPH)或“Table-per-Type”(TPT)策略来正确映射子类。我们可以使用“Table("TableName")”属性来指定表名,并使用“Key”属性来指定主键。
  3. 检查数据库连接字符串。确保我们连接到正确的数据库,并且数据库中存在正确的表和列。

如果我们仍然遇到问题,我们可以尝试在互联网上搜索解决方案,或者寻求其他开发人员的帮助。

请注意,我们在回答中没有提到任何云计算品牌商,因为这个问题与云计算无关。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Entity Framework 继承映射

继承是面向对象开发时经常用到,但是SQL Server 数据库不具备继承,那么怎么办能?...(Table per Concete class):完全丢弃多态和继承 零、TPH TPH是将整个类层次映射到表中,该表包含所有类中所有属性,特定行表示具体子类通过 discriminator 来标识区分...TPH是Code First 默认人继承策略,没有表示C#多态特性,优点是不需要联合查询,是最简单策略。缺点是除主键和标识列 discriminator 外,其他列都是可为空。...父类中某些属性对于子类来说并不是必需,因此Code First 会将改属性创建为可空列。TPH策略因为有 discriminator存在,维护性不强,因此违反了第三范式。...下面总结一下以上三种策略使用场景 策略 场景 TPC 不需要多表关联查询或者很少查询父类数据,并且没有与父类关联类 TPH 需要多表关联查询,且子类属性较少 TPT 需要多表关联查询,且子类属性很多

79610
  • 01-EF Core笔记之创建模型

    这个功能我没有试验成功。...继承 关于继承关系如何在数据库中呈现,目前有三种常见模式: TPH(table-per-hierarchy):一张表存放基类和子类所有列,使用discriminator列区分类型,目前EF Core...当发现有继承关系时,EF Core会自动维护一个名为Discriminator阴影属性,我们可以设置该字段属性: modelBuilder.Entity() .Property(..."Discriminator") .HasMaxLength(200); EF Core允许我们通过FluentAPI方式自定义鉴别器列名和每个类对应值: modelBuilder.Entity...这里介绍两个概念 ModelClrType:模型实体类型 ProviderClrType:数据库提供程序支持类型 举个例子,string类型,对应数据库提供程序也是string类型,而枚举类型,对数据库提供程序来说没有与它对应类型

    3.1K20

    EF基础知识小记六(使用Code First建模自引用关系,常用于系统菜单、文件目录等有层级之分实体)

    日常开发中,经常会碰到一些自引用实体,比如系统菜单、目录实体,这类实体往往自己引用自己,所以我们必须学会使用Code First来建立这一类模型....以下是自引用表数据库关系图: ok,下面开始介绍从零创建一个Code First自引用模型. 1、往目标项目中添加EF包,通过NuGet程序包添加 导入相关程序集. 2、创建自引用实体类...,从实体类可以看出该实体拥有单个父类型、子类型集合,这里比较特殊是,这里父类型和子类型都是自己,也就是自引用.注意:一个没有付类型实体,该实体就是整个继承类型最顶端. 5、编写测试代码:...,则跳出递归循环 } 简单解释下测试代码逻辑: (1)、从所有的节点中获取没有父节点节点,该节点为顶级节点 (2)、然后通过递归将该顶级节点下面的所有的子节点全部遍历出来,每当递归到节点含有子节点集合...,则递归深度加1.当一个继承链遍历完毕,继续遍历第二个继承链.

    88960

    Code-First Migrations随Entity Framework 4.3一同发布

    Entity Framework 4.3 版本终于为开发者带来了迁移(Migrations)功能,从此以后使用EF不必依赖于单独预发布迁移库了。 什么是EF迁移呢?...如果你正在使用Entity Framework Code-First,那么借助迁移功能,你可以不需要删除再重新创建数据库模式(database schema),而只要通过更新就能将改动映射到你POCO...虽然迁移功能作为Nuget包开放已经有了一阵子(如果出于某些遗留原因,你还在使用低版本Entity Framework,那么你还可以继续使用那个Nuget包),但是它并没有得到微软官方支持。...理想情况下,只有在需要覆写默认行为时,例如重命名列名而不是删除再创建一个新列,或者为增加列提供默认值时,你才会用得到基于代码迁移。 另外,迁移还能够创建用于生产数据库部署脚本。...查看英文原文:http://www.infoq.com/news/2012/02/migrations InfoQ中文原文:Code-First Migrations随Entity Framework

    66090

    EF基础知识小记二

    [模型=>数据库(Model First)] (3)、EF还提供了以代码为中心模型设计方式,通过这种方式我们可以在不使用设计器情况下,手工创建一系列领域类、领域类之间关联以及上下文对象(一般继承自..."代码优先迁移"工具,他能让数据库保持你模型中最新修改. 2、EF工作方式 EF有三种工作方式,一种是Database First,第二种是Model First,第三种是Code First,Database...Code First是一种可以替代edmx(EF模型设计器)方案。从概念上讲,Code First同时支持Database First和Model First两种工作方式....Model First:EF 会在 EDMX 后从 XML 中创建内存中模型 Code First:EF 会通过读取类(即您提供 DbContext 和映射)来创建相同内存中模型 3、关于EF7只支持代码建模方式原因...4、关于EF7数据库迁移功能 数据库迁移:它允许你从基于代码模型创建数据库,并随着模型改变而演进,对于EDMX模型你可以生成一个与当前模型匹配创建数据库SQL脚本,但是没有办法生成一个包含模型变化脚本

    1.2K70

    EF 约定介绍

    当前环境为EF Code First开发模式中 一、EF默认约定 1、常用约定 (1)、当没有显示指定实体主键时候,EF会默认将长得最像Id属性(且类型为GUID)设为主键 (2)、设计实体时,当一个实体包含一个集合属性...,该集合属性里面的元素是另一个实体时,则默认未一对多关系,即使没有显示指定一对多关系,EF会默认设置主外键(主从)关系 (3)、一对一实体关系,需要手动设置主从关系 (4)、多对多无载荷关系实体...知道哪些类型包含在当前模型中,因此,我们需要自定义一个ZdyNameDbContext,并继承DbContext,并在自定义DbContext中暴露需要暴露类型,这样在Code First开发模式中,...,EF会默认将长得最像Id属性(且类型为GUID)设为主键,如果类中属性(Property)名称为 ID (不区分大小写)或 ClassNameID(类名 + ID),Code First 则推断这个属性为主键...5、复杂类型约定(Complex Types Conventions) 如果Code First无法从类型中推测出主键,也没有通过Data Annotations或者Fluent Api进行注册主键,

    1.6K100

    Entity Framework CodeFirst尝试

    前言 Code First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入功能。...使用Code First模式进行EF开发时开发人员只需要编写对应数据类(其实就是领域模型实现过程),然后自动生成数据库。...但是对于EF处理过程有所差别,例如我们使用Code First就不再需要EDM文件,所有的映射通过“数据注释”和“fluent API”进行映射和配置。...另外需要注意是“Code First”并不代表一定就必须通过数据类来定义模型,事实上也可以通过现有数据库生成数据类。...因此接下来我们需要给这个应用安装EntityFramework包,因为到目前为止我们并没有引入EF框架相关任何内容,我们需要引入EF相关程序集。但是我们有更好选择那就是NuGet。

    65930

    Entity Framework简介

    零、什么是Entity Framework Entity Framework (简称EF),是.NET Object/Relational Mapping 实体框架(简称ORM),可以在 SQL Server...一、领域建模方式 Entity Framework 有三种领域建模方式:Code First、Model First和Data First 1....Code First Code First 可以通过类来描述模型,然后通过类来创建数据库,这种类简称为POCO(Plain Old CLR Object)。...Code First 优点如下: 可以创建一个更富有逻辑、更灵活应用程序; 因为没有自动生成难以修改代码,所以我们可以对代码完全控制; 只需要定义映射,其余一切交给Entity Framework...2.Model First Model First 允许我们使用实体设计器在空模型中创建模型实体,及其关系和继承层次结构,然后创建数据库。

    1.7K10

    【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问

    它提供了 Code First 开发方法,允许开发人员通过代码来定义模型、配置映射关系和创建数据库。此外,EF Core 还支持数据迁移,使得在开发过程中数据库模式变更更加容易管理和部署。...可扩展性: EF Core 提供了丰富扩展机制,允许开发者自定义行为,如数据提供程序创建。 兼容性: EF Core 可以与现有的 Entity Framework 应用集成,并不完全兼容。...2.3 Code First Code First 是 Entity Framework(EF一个开发范式,它侧重于通过编写代码来定义模型(Model)和数据库架构,而不是依赖于图形界面或者配置文件来创建数据库实体...数据库生成: 开发者可以利用 Code First 创建新数据库,或者与现有数据库集成。...使用 Code First 可以提高开发效率,并使得数据模型与代码一致性更强。不过,Code First 通常需要开发者对 ORM 原理和数据库设计有一定了解,才能更好地利用其优势。

    38800

    Entity Framework复杂类型属性映射

    Code First发现不能推断出类主键,并且没有通过Data Annotations或Fluent API注册主键,那么该类型将被自动注册为复杂类型。...注意: 复杂类型检测要求该类型不具有引用实体类型属性,还要求不可引用另一类型集合属性 复杂类型在数据库中映射列名称为:负载类型类名_属性名 我们接下来创建 DbContext 类 public...出现上述错误原因是我们没有初始化 Address 类,其中一个(后面我会讲解另一个解决方法)解决方法是在 new User(){} 内初始化 Address,修正后代码如下: using (var...从上面的讲解我们卡一看到,用复杂类型很双,一直用一直爽,但是复杂类型还是有他限制: 不能共享引用:因为没有主键标识,不能被自身实例之外任何对象引用; 没有优雅方式标识空引用:即使查询出数据为空...,EF Code First 依然会初始化复杂类型对象; 无法延迟加载。

    67710

    Mybatis Mapper.xml 配置文件中 resultMap 节点源码解析

    前言 在上篇文章 Mybatis 解析 SQL 源码分析一 介绍了 Maper.xml 配置文件解析,但是没有解析 resultMap 节点,因为该解析比较复杂,也比较难理解,所有单独拿出来进行解析...,很多高级用法都没有使用过,通过这次学习,希望能在工作使用,能够写出简洁高效SQL。...extends:继承,一个 resultMap 可以继承另一个 resultMap,这个属性是不是没有用过 ?...,默认情况下 mybatis 会调用实体类无参构造方法创建一个实体类,然后再给各个属性赋值,如果没有构造方法时候,可以使用 constructor 节点进行绑定,如现有如下构造方法: public...discriminator 鉴别器,mybatis可以使用 discriminator判断某列值,然后根据某列值改变封装行为,有点像 Java switch 语句,鉴别器指定了 column 和

    2.1K40

    了解EF CodeFirstMigrator功能与Migrator.Net对比

    CodeFirst是EF提供一种技术手段,使我们从以往创建数据库后再创建模型变成了只需要关注代码方式进行创模,然后通过EF框架映射到数据库架构并生成。...这里要说下,在我们数据库连接都没有配置情况下,默认情况下VS2012使用LocalDB,VS2010使用SqlExpress。...,做为一个架构师来说,我更偏向于使用Migrator.Net,因为CodeFirst是EF一种功能,我们项目有时候不是必须使用EF。...EF发展到现在已经到6.1版本,肯定已经很强大了,种种原因至今还未接触过,不知其强大功能,今后有机会还是希望接触一下。...CodeFirst 参考资料: 对新数据库使用 Code First 约定 Code First 迁移 自动化 Code First 迁移 Migrate.exe

    93490

    CSharpEntityFramework与CodeFirst实践

    这样一来,使得我们更加关注代码开发。在c#中,我们使用EntityFramework来实现Code First场景。...无论怎样,我们作为开发都要与数据库进行打交道,来回切换关注东西,还要注意数据库表建立对不对,数据类型对不对等等。好在c#中有了EF这样强大框架以及Code First思想。...此迁移文件设计器代码包含当前 Code First 模型快照。在下一次搭建迁移基架时,将使用此快照计算对模型更改。...此迁移文件设计器代码包含当前 Code First 模型快照。在下一次搭建迁移基架时,将使用此快照计算对模型更改。...此迁移文件设计器代码包含当前 Code First 模型快照。在下一次搭建迁移基架时,将使用此快照计算对模型更改。

    26810

    Entity Framework 约定

    约定形式有如下几种: 类型发现约定 主键约定 关系约定 复杂类型约定 自定义约定 零、类型发现约定 在Code First 中。...(); } 一、主键约定 Code First 会根据模型中定义***id***,推断属性为主键(如果类中没有id属性,会查找定义成***类名称+id***属性,将这个属性作为主键...如果一个类中既没有id属性,也没有类名+id属性,那么代码在运行时将会报错,因为EF没有找到符合要求字段创建主键。...当EF检测出外键属性后,会根据外键属性是否为空来判断关系,如果外键可以为空,那么模型之间关系将会配置成可选Code First 不会再关系上配置级联删除。...First 不能推断出模型中主键,并且没有通过Data Annotations 或者Fluent API进行手动配置主键时,该模型将会自动被配置为复杂类型,检测复杂类型时要求该类型没有引用实体类型属性

    1.3K10

    MyBatis官方文档-XML 映射文件

    ResultMap 设计思想是,对于简单语句根本不需要配置显式结果映射,而对于复杂一点语句只需要描述它们关系就行了。 你已经见过简单映射语句示例了,没有显式指定 resultMap。...如果列名和属性名没有精确匹配,可以在 SELECT 语句中对列使用别名(这是一个基本 SQL 特性)来匹配标签。...上面这些简单示例根本不需要下面这些繁琐配置。 出于示范原因,让我们来看看最后一个示例中,如果使用外部 resultMap 会怎样,这也是解决列名不匹配另外一种方式。...鉴别器(discriminator)元素就是被设计来应对这种情况,另外也能处理其它情况,例如类继承层次结构。 鉴别器概念很好理解——它很像 Java 语言中 switch 语句。...这意味着,当 SqlSession 完成并提交时,或是完成并回滚,没有执行 flushCache=true insert/delete/update 语句时,缓存会获得更新。

    1.7K30
    领券