2
我见过这个问题问了几次,但我恐怕我只是不理解答案。违反了多重性约束。关系xxx的角色xxx具有多重性1或0..1
简而言之,我有一个包含PlayerBaseballStat类型属性的播放器。它是1对1的关系。 PlayerBaseballStat有一个ICollection<BaseballStat>
属性。 PlayerBaseballStat和BaseballStat都有PlayerId来加入关系。
public class Player
{
public Player()
{
// initialize with empty shell
PlayerBaseballStat = new PlayerBaseballStat();
}
public int PlayerId { get; set; }
//other properties removed for brevity
public virtual PlayerBaseballStat PlayerBaseballStat { get; set; }
}
public class PlayerBaseballStat
{
[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int PlayerId { get; set; }
public virtual Player Player { get; set; }
//other properties removed for brevity
public virtual ICollection<BaseballStat> BaseballStats { get; set; }
}
public class BaseballStat : EntityBase
{
public int PlayerId { get; set; }
public virtual Player Player { get; set; }
public int Year { get; set; }
[MaxLength(25)]
[Required]
public string StatName { get; set; }
[Required]
public decimal StatValue { get; set; }
}
的映射是:
modelBuilder.Entity<Player>()
.HasOptional(p => p.PlayerBaseballStat);
modelBuilder.Entity<PlayerBaseballStat>()
.HasRequired<Player>(x => x.Player);
modelBuilder.Entity<PlayerBaseballStat>()
.HasMany(p => p.BaseballStats);
modelBuilder.Entity<BaseballStat>()
.HasKey(x => new { x.PlayerId, x.Year, x.StatName });
modelBuilder.Entity<BaseballStat>()
.HasRequired(x => x.Player);
数据访问层是一个模板库。读取操作发生多重性约束违规。
public T Get(Expression<Func<T, bool>> where)
{
return dbset.Where(where).FirstOrDefault<T>();
}
实际的读操作
_playerBaseballStatsRepository.Get(x => x.PlayerId == playerId);
这相当于
dataContext.PlayerBaseballStats.FirstOrDefault(x => x.PlayerId == playerId);
我知道我缺少的东西映射,但我似乎无法推测出来。请帮忙。
感谢您的回复。我添加了一些关于何时发生错误以及如何造成的附加信息。它目前发生在读取操作上。我还没有测试过更新/插入功能。 – jason 2013-03-15 12:12:30
杰森 - 我试图通过添加一个模仿你的模板库模式的类来复制这个问题,并且所有东西仍然适用于你提供的模式。我的第一个想法是,你的数据在某种程度上与你的数据不匹配,即某些记录不同步。数据如何进入您的存储库? – 2013-03-15 18:38:40
数据从外部来源被吹入。数据可能是问题的一部分。与此同时,我从播放器对象中删除了PlayerBaseballStat,因为它只需要一些管理功能,而不是其他应用程序。之后我会再次回顾这个问题,因为我有一个非常艰难的截止日期(棒球赛季) – jason 2013-03-16 18:46:53