1

ASP.NET MVC アプリケーションで Entity Framework を使用して、具体的なクラスごとのテーブル マッピングを実行しようとしています。これは学校の課題用であり、既存の (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 には、1 対多のような関係の規則があるためです。このテーブルを複数名詞名で自動的に理解するので、そのような例外をスローしたためです。このリンクにアクセスして修正してください

AbstractOpgeost クラスにもテーブル名を指定してみてください。

AbstractOpgelost クラスの抽象化を避けることはできますか?

于 2013-05-17T03:10:01.703 に答える