C# 一对多关系映射返回验证错误

C# 一对多关系映射返回验证错误,c#,entity-framework,mapping,C#,Entity Framework,Mapping,根据评论中的建议,根据新情况进行编辑: 目前我有这个映射 public ShowMap() { ToTable("Shows"); HasKey(x => x.ShowID); Property(x => x.ShowID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) .IsRequire

根据评论中的建议,根据新情况进行编辑:

目前我有这个映射

public ShowMap() {
        ToTable("Shows");
        HasKey(x => x.ShowID);

        Property(x => x.ShowID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .IsRequired()
            .HasColumnName("ShowID");
}

public EpisodeMap() {
        ToTable("Episodes");
        HasKey(x => x.EpisodeID);

        Property(x => x.EpisodeID)
        .IsRequired()
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
        .HasColumnName("EpisodeID");

        Property(x => x.ShowID)
            .IsRequired()
            .HasColumnName("ShowID");

        Property(x => x.EpisodeNumber)
            .IsRequired()
            .HasColumnName("EpisodeNumber");
}
这将生成以下数据库:

但是,当seed方法运行时,我收到这个错误。由于我无法从命令行命令
Update Database
调试变量的值(至少,据我所知不是这样),因此我看不到该属性包含什么内容

一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性

将关系添加到映射时,收到以下错误:

在模型生成过程中检测到一个或多个验证错误:

System.Data.Entity.Edm.EdmAssociationEnd::多重性在关系“Spoint\u Show”中的角色“Spoint\u Show\u Source”中无效。因为依赖角色引用密钥属性,所以依赖角色的多重性上限必须为“1”

关系:

        HasRequired(x => x.Show)
            .WithMany(x => x.Episodes)
            .HasForeignKey(x => x.EpisodeID);
这就是模型:

public class Episode {
  public int EpisodeID {get; set;}
  public int ShowID {get; set;}
  public int EpisodeNumber {get; set;}
  public virtual Show Show { get; set; }
}

public class Show {
  public int ShowID {get; set;}
  public virtual ICollection<Episode> Episodes { get; set; }
}
公共课插曲{
public int eposodeid{get;set;}
公共int ShowID{get;set;}
public int eposodenumber{get;set;}
公共虚拟显示显示{get;set;}
}
公开课{
公共int ShowID{get;set;}
公共虚拟ICollection集{get;set;}
}
我忽略了哪些导致验证错误的因素

编辑:为了确保我没有忘记任何东西,是github上的项目。

这就是问题所在(从git存储库,class
epiodemap
):

eposodeid
剧集
中的主键,EF希望在这种情况下,没有
剧集
集合,而是
剧集
引用(“多重性上限=1”)

对于一对多关系,它必须是:

HasRequired(x => x.Show)
    .WithMany(x => x.Episodes)
    .HasForeignKey(x => x.ShowID);

为什么需要一把compmosite钥匙?新的{x.ParentID,x.ChildID})是否唯一性仅由该表同时存在两个键来建立?子表中记录的唯一性由ParentID和ChildID确定。这里适用的现实世界用法是一个节目及其剧集:一个节目有多个剧集,但每个剧集只属于一个节目。你会建议一种不同的方法吗?从本质上看,你是在告诉EF映射ChildId两次,一个是复合键,一个是FK。从POCO中删除子id和父id。EF可以解决这个问题。如果可能的话,在子元素(实体种子)上声明一个唯一的PK,这样就不必使用复合元素。我已经更新了帖子以反映这些变化。这真的就是你的模型和映射吗?这是一种标准的一对多关系,每个人都使用过一百次,没有任何问题。这个异常毫无意义。这确实解决了与关系相关的错误,谢谢!我已经更改了它,现在又创建了表。我仍然收到seed方法上的实体验证错误,尽管(Github:)已解决!错误正如上面所说的那样:validationerror。我检查了测试数据和映射,发现其中一个属性的最大长度是128。种子数据包含的内容远不止这些,将其设置为1028解决了问题,我收到了测试数据。@Jeroenvanevel:作为下次无法调试验证错误时的提示:在try-catch块中手动调用种子方法末尾的
SaveChanges
,并将错误写入文件,如图所示:非常好的主意,我将把它添加到我的项目中。回想起来,错误消息实际上告诉了我出了什么问题,我应该早点发现。对于我的E-R型号,我的POCO类中根本没有与您的
ShowID
字段对应的字段。我使用的是代码优先的开发方法。它起作用了。我的印象是,fluent配置api将能够在第一次创建数据库时自己实现它。
HasRequired(x => x.Show)
    .WithMany(x => x.Episodes)
    .HasForeignKey(x => x.ShowID);