1

我正在尝试在 ASP.NET MVC 应用程序中使用实体框架进行逐表类映射。这是一个学校作业,我必须映射到现有的(mysql)数据库。

public class Deelnemer
{
    public Deelnemer()
    {
        OpgelosteDoosVragen = new List<OpgelostDoosVraag>();
    }

    public string Emailadres { get; set; }
    public virtual IList<OpgelostDoosVraag> OpgelosteDoosVragen { get; set; } 

    }
}

此类包含“OpgelosteDoosVragen”列表。“OpgelosteDoosVragen”类(目前为空)继承自“AbstractOpgelost”。

public abstract class AbstractOpgelost
{
    protected AbstractOpgelost()
    {
        OpgelostId = new Guid();
    }

    public Guid OpgelostId { get; set; }
    public virtual AbstractVraag AbstractVraag { get; set; }
    public virtual AbstractAntwoord AbstractAntwoord { get; set; }
    public virtual Element Element { get; set; }
}


public class OpgelostDoosVraag : AbstractOpgelost
{

}

映射:

public class AbstractOpgelostMap : EntityTypeConfiguration<AbstractOpgelost>
{
    public AbstractOpgelostMap()
    {
        this.HasKey(t => t.OpgelostId);

        this.Property(t => t.OpgelostId)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

        this.HasRequired(t => t.Element).WithMany().Map(t => t.MapKey("elementNaam"));
        this.HasRequired(t => t.AbstractVraag).WithMany().Map(t => t.MapKey("vraagId"));
        this.HasRequired(t => t.AbstractAntwoord).WithMany().Map(t => t.MapKey("antwoordId"));
    }
}

public class OpgelostDoosVraagMap : EntityTypeConfiguration<OpgelostDoosVraag>
{
    public OpgelostDoosVraagMap()
    {
        this.Map(t =>
            {
                t.MapInheritedProperties();
                t.ToTable("doos_opgelostevragen");
            });
    }
}

OnModelCreating 方法:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {   
        modelBuilder.Configurations.Add(new OpgelostDoosVraagMap());
        modelBuilder.Configurations.Add(new DeelnemerMap());
        modelBuilder.Configurations.Add(new doosMap());
        modelBuilder.Configurations.Add(new doosVraagMap());
        modelBuilder.Configurations.Add(new DoosAntwoordMap());
        modelBuilder.Configurations.Add(new ElementMap());
        modelBuilder.Configurations.Add(new AbstractAntwoordMap());
        modelBuilder.Configurations.Add(new AbstractVraagMap());
        modelBuilder.Configurations.Add(new AbstractOpgelostMap());

    }

当我尝试访问 Deelnemer 中的列表时,抛出了一个 EntityCommandExecution,它说: MySql.Data.MySqlClient.MySqlException: Table 'kindermishandeling.abstractopgelosts' doesn't exist 问题是实体框架想要映射到抽象类“AbstractOpgelost”的表,但它必须映射到 doos_opgelostevragen(具体的表班级)。

有没有人在我的映射中看到问题。我正在寻找几个小时,我很绝望......

4

1 回答 1

0

我认为问题在public virtual IList<OpgelostDoosVraag> OpgelosteDoosVragen { get; set; }. 因为 EF 对一对多的关系有约定。它会自动理解这个表的复数名词名称,所以这是一个原因,因为它抛出了这样的异常。请转到此链接并修复它

请尝试为 AbstractOpgelost 类指定表名。

你能避免对 AbstractOpgelost 类进行抽象吗?

于 2013-05-17T03:10:01.703 回答