使用继承时,.net中的列名无效

本文关键字:无效 net 继承 | 更新日期: 2023-09-27 18:14:23

我有一个映射关系的问题在visual studio .net中进行逆向工程

我使用继承:

public class Quiz : Component  
{
    public QuizQuestion rootQuestion { get; set; }
    public override String getType() { return "quiz"; }
}

属性rootQuestion没有在母类中指定,它只存在于子类

Quiz在我的sqlserver数据库中不作为表存在(只有QuizQuestionsComponent表存在),(我的老师告诉我这样做这个项目的Java部分)。

但我希望子类测验有一个属性rootQuestion,指的是quizRootQuestion在我的数据库。我是这样做的:

public class QuizMapper : EntityTypeConfiguration<Quiz>        
{
    public QuizMapper()               
    {
        this.HasKey(t => t.ComponentID);
        this.HasOptional(c => c.rootQuestion)
            .WithMany().Map(m => m.MapKey("quizRootQuestionID"));     
    }
}
public class QuizQuestionMap : EntityTypeConfiguration<QuizQuestion>
{
    public QuizQuestionMap()
    {
        // Properties
        // Table & Column Mappings
        this.HasKey(t => t.QuestionID);
        this.ToTable("QuizQuestions");
        this.Property(t => t.QuestionID).HasColumnName("questionID");
    }
}

当我试图在浏览器中运行时,我得到这个错误:
无效的列名'rootQuestion_QuestionID'.

Tables in my database:

组件:

  componentId                 
  quizRootQuestionID          
  TypeId(=discriminator)

QuizQuestions

questionID                 
question
谁能告诉我我做错了什么?

使用继承时,.net中的列名无效

如果您忘记将QuizMapper添加到派生上下文的OnModelCreating中的模型构建器配置中,您将得到这个异常:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new QuizMapper());
    modelBuilder.Configurations.Add(new QuizQuestionMap());
}