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

Jer*_*vel 7 c# mapping entity-framework

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

目前我有这个映射

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");
}
Run Code Online (Sandbox Code Playgroud)

这导致以下数据库:

情节

展会

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

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

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

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

System.Data.Entity.Edm.EdmAssociationEnd :: Multiplicity在关系'Episode_Show'中的角色'Episode_Show_Source'中无效.由于"从属角色"是指关键属性,因此从属角色的多重性的上限必须为"1".

关系:

        HasRequired(x => x.Show)
            .WithMany(x => x.Episodes)
            .HasForeignKey(x => x.EpisodeID);
Run Code Online (Sandbox Code Playgroud)

这是模型:

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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Sla*_*uma 16

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

HasRequired(x => x.Show)
    .WithMany(x => x.Episodes)
    .HasForeignKey(x => x.EpisodeID);
Run Code Online (Sandbox Code Playgroud)

EpisodeID是PK in Episode和EF期望在这种情况下一对一映射没有Episodes集合而是Episode引用("multiplicity的上限= 1").

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

HasRequired(x => x.Show)
    .WithMany(x => x.Episodes)
    .HasForeignKey(x => x.ShowID);
Run Code Online (Sandbox Code Playgroud)