gpt4 book ai didi

c# - Entity Framework 'table-per-concrete-class' 映射到错误的表

转载 作者:行者123 更新时间:2023-11-30 23:18:19 24 4
gpt4 key购买 nike

我正在尝试在 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:表“kindermishandeling.abstractopgelosts”不存在问题是 Entity Framework 想要映射到抽象类“AbstractOpgelost”的表,但它必须映射到 doos_opgelostevragen(具体类的表)。

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

最佳答案

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

请尝试为 AbstractOpgelost 类指定表名。

是否可以避免对 AbstractOpgelost 类进行抽象?

关于c# - Entity Framework 'table-per-concrete-class' 映射到错误的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com