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

时间:2013-05-18 09:22:42

标签: c# .net inheritance entity-framework-5

我在映射关系时遇到问题 而在visual studio .net中进行逆向工程

我使用继承:

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

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

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

但是我希望子类Quiz有一个属性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'无效。

我的数据库中的表:

组件:

  componentId                 
  quizRootQuestionID          
  TypeId(=discriminator)

QuizQuestions

questionID                 
question

有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

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

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