table-per-concrete-class'映射到错误的表
本文关键字:错误 映射 table-per-concrete-class | 更新日期: 2023-09-27 18:13:55
我试图做一个表每具体类映射与实体框架在一个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中的列表时,entitycommandexexecution被抛出,它说:MySql.Data.MySqlClient.MySqlException: Table 'kindermishandeling.abstractopgelosts' doesn't exist
问题是实体框架想映射到抽象类'AbstractOpgelost'的表,但它必须映射到doos_opgelostevragen(具体类的表)。
有人看到我的映射有问题吗?
我认为问题在public virtual IList<OpgelostDoosVraag> OpgelosteDoosVragen { get; set; }
。因为EF有一对多关系的约定。它会自动理解这个表的复数名词名,这是因为它抛出了这样的异常。请到这个链接并修复它
请尝试为AbstractOpgelost类也指定表名。
你能避免为AbstractOpgelost类做抽象吗?