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

时间:2013-06-12 17:23:56

标签: c# entity-framework mapping

根据评论中的每个建议编辑新情况:

目前我有这个映射

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");
}

这导致以下数据库:

Episodes

Shows

但是,当种子方法运行时,我收到此错误。因为我无法从命令行命令Update-Database调试变量的值(至少,据我所知),我无法看到该属性的含义。

  

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

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

  

在模型生成期间检测到一个或多个验证错误:

     

System.Data.Entity.Edm.EdmAssociationEnd ::多重性在关系'Episode_Show'中的角色'Episode_Show_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; }
}

我忽略了什么导致验证错误?

编辑:只是为了确定我没有忘记任何事情,this是github上的项目。

1 个答案:

答案 0 :(得分:16)

这是问题(来自您的git存储库,类EpisodeMap):

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

EpisodeIDEpisode中的PK,EF在这种情况下需要一对一的映射,而不是Episodes集合,而是Episode引用(“上层”多重性的界限= 1“)。

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

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