根据评论中的每个建议编辑新情况:
目前我有这个映射
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; }
}
我忽略了什么导致验证错误?
编辑:只是为了确定我没有忘记任何事情,this是github上的项目。
答案 0 :(得分:16)
这是问题(来自您的git存储库,类EpisodeMap
):
HasRequired(x => x.Show)
.WithMany(x => x.Episodes)
.HasForeignKey(x => x.EpisodeID);
EpisodeID
是Episode
中的PK,EF在这种情况下需要一对一的映射,而不是Episodes
集合,而是Episode
引用(“上层”多重性的界限= 1“)。
对于一对多的关系,它必须是:
HasRequired(x => x.Show)
.WithMany(x => x.Episodes)
.HasForeignKey(x => x.ShowID);