Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将鉴别器列映射到类属性实体框架核心2.2.0_C#_Entity Framework Core - Fatal编程技术网

C# 将鉴别器列映射到类属性实体框架核心2.2.0

C# 将鉴别器列映射到类属性实体框架核心2.2.0,c#,entity-framework-core,C#,Entity Framework Core,我无法生成实体框架核心(v.2.2.0)的迁移 我有一个类“Question”,它由类“MultipleChoiceQuestion”和“MatchColumns”继承。我正在尝试使用实体框架核心构建TPH(每个层次的表)继承。我的基类(Question)有一个属性“QuestionType”来区分子类。“QuestionType”属性是一个枚举。我不希望EF生成鉴别器列,但使用属性“QuestionType”作为鉴别器列 为了创建正确的迁移,我在dbcontext类中使用以下代码: prote

我无法生成实体框架核心(v.2.2.0)的迁移

我有一个类“Question”,它由类“MultipleChoiceQuestion”和“MatchColumns”继承。我正在尝试使用实体框架核心构建TPH(每个层次的表)继承。我的基类(Question)有一个属性“QuestionType”来区分子类。“QuestionType”属性是一个枚举。我不希望EF生成鉴别器列,但使用属性“QuestionType”作为鉴别器列

为了创建正确的迁移,我在dbcontext类中使用以下代码:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Question>(b => b.HasDiscriminator(x => x.QuestionType).HasValue<MultipleChoiceQuestion>(QuestionType.MultipleChoiceQuestion).HasValue<MatchColumns>(QuestionType.MatchColumns));

    modelBuilder.Entity<Question>().Property(p => p.QuestionType).HasMaxLength(100).HasColumnName("QuestionType");
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
实体(b=>b.HasDiscriminator(x=>x.QuestionType).HasValue(QuestionType.MultipleEchoiceQuestion).HasValue(QuestionType.MatchColumns));
modelBuilder.Entity().Property(p=>p.QuestionType).HasMaxLength(100).HasColumnName(“QuestionType”);
}
但是,当我运行“添加迁移”时,会出现以下错误:

实体类型“Question”是层次结构的一部分,但未配置鉴别器值

无法找出配置代码失败的原因。我查看了Microsoft提供的以下文档:

是否有任何指针说明配置不完整/中断的原因


TIA.

问题中的任何一个都应该是抽象的。或者,它应该是一种可能的记录类型,带有一个鉴别器值。

或者
问题
应该是抽象的。或者它应该是一种可能的记录类型,带有一个鉴别器值。

谢谢您的回答。将“问题”标记为抽象会创建迁移,但现在由于类是抽象的,它会破坏HTTP Post上的模型绑定。还有其他解决方法吗?首先,不应该通过MVC绑定数据实体,这就是视图模型的用途。MVC的默认绑定要求在编译时知道每个属性的具体类型。您只能告诉MVC通过绑定到
multiplechicequestion
类型的变量来创建
multiplechicequestion
的实例。事实上,我实际上使用的是视图模型。我正在尝试创建一个问题纸,让老师从一个问题混合列表中选择问题(包括多项选择题和匹配题)。当发布问题列表时,控制器将获取一个视图模型对象,该对象又包含一个抽象问题类对象列表。好吧,您必须更改控制器以接受更具体的内容。例如一个
列表
公共类问题包装器{public MultipleChoiceQuestion Multi{get;set;}公共匹配列匹配{get;set;}
谢谢你的回答。将“问题”标记为抽象会创建迁移,但现在由于类是抽象的,它会破坏HTTP Post上的模型绑定。还有其他解决方法吗?首先,不应该通过MVC绑定数据实体,这就是视图模型的用途。MVC的默认绑定要求在编译时知道每个属性的具体类型。您只能告诉MVC通过绑定到
multiplechicequestion
类型的变量来创建
multiplechicequestion
的实例。事实上,我实际上使用的是视图模型。我正在尝试创建一个问题纸,让老师从一个问题混合列表中选择问题(包括多项选择题和匹配题)。当发布问题列表时,控制器将获取一个视图模型对象,该对象又包含一个抽象问题类对象列表。好吧,您必须更改控制器以接受更具体的内容。例如一个
列表
公共类问题包装器{public multipleechoicequestion Multi{get;set;}公共匹配列匹配{get;set;}}