11

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

目前我有这个映射

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

这将产生以下数据库:

剧集

节目

但是,当运行种子方法时,我收到此错误。由于我无法从命令行命令调试变量的值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; }
}

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

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

4

1 回答 1

18

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

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

EpisodeID是 PK,Episode在这种情况下,EF 期望一对一的映射没有Episodes集合而是Episode引用(“多重性上限 = 1”)。

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

HasRequired(x => x.Show)
    .WithMany(x => x.Episodes)
    .HasForeignKey(x => x.ShowID);
于 2013-06-13T11:30:56.380 回答