Entity framework 为什么我会得到一个“;关系多重性违规“;访问关系属性?

Entity framework 为什么我会得到一个“;关系多重性违规“;访问关系属性?,entity-framework,entity-framework-4.1,ef-code-first,automapper,Entity Framework,Entity Framework 4.1,Ef Code First,Automapper,我尝试在以下类中将实体对象映射到视图模型: public class ConsumerIndexItem: MappedViewModel<Consumer> { public string UserName { get; set; } public string RoleDescription { get; set; } public override void MapFromEntity(Consumer entity) { bas

我尝试在以下类中将实体对象映射到视图模型:

public class ConsumerIndexItem: MappedViewModel<Consumer>
{
    public string UserName { get; set; }
    public string RoleDescription { get; set; }
    public override void MapFromEntity(Consumer entity)
    {
        base.MapFromEntity(entity);
        UserName = entity.User.UserName;
    }
}
public class Consumer: AuditableEntity
{
    public virtual User User { get; set; }
    public virtual Role Role { get; set; }
}
public class IndexModel<TIndexItem, TEntity> : ViewModel where TEntity : new()
{
    public IndexModel()
    {
        Items = new List<TIndexItem>();            
    } 
    public List<TIndexItem> Items { get; set; }
    public virtual void MapFromEntityList(IEnumerable<TEntity> entityList)
    {
        Items = Mapper.Map<IEnumerable<TEntity>, List<TIndexItem>>(entityList);
    }
}
public class ConsumerIndexModel: IndexModel<ConsumerIndexItem, Consumer>
在线
UserName=entity.User.UserName
ConsumerIndexItem
中,我得到以下异常:

A relationship multiplicity constraint violation occurred: An EntityReference can have no more than one related object, but the query returned more than one related object. This is a non-recoverable error.

如果在即时窗口中执行
?entity.User.UserName
,则会得到预期的用户名值。这里可能有什么问题?

让我解释一下我为什么会有这个例外,您可以将它与您自己的情况联系起来。我将EF代码第一个模型映射到现有数据库。其中两个实体之间存在一对多关系。子表具有由Id和日期组成的复合主表。但是,我在我的fluent地图中遗漏了主键的第二段:

this.HasKey(t => t.Id);
奇怪的是,模型工作了,但在某些情况下抛出了异常,很难理解为什么。显然,当EF加载子实体的父实体时,有多个父实体,因为键不仅有Id,还有日期。决议将包括关键问题的第二部分:

this.HasKey(t => new { t.Id, t.Date });
帮助我找出问题的工具是EF电动工具,目前它在Beta 3中。该工具为EF上下文类提供上下文菜单,其中一项是视图实体模型DDL SQL。尽管我可以通过检查代码来发现这一点,但该工具很好地显示了EF模型与实际数据库的匹配程度


我相信你得到这个例外是因为某种原因关系的多样性被破坏了。在我的例子中,它是不正确的映射,在你的例子中,它可能是其他的东西,我看不出你的代码

让我解释一下我为什么会有这个例外,你可以把它与你自己的情况联系起来。我将EF代码第一个模型映射到现有数据库。其中两个实体之间存在一对多关系。子表具有由Id和日期组成的复合主表。但是,我在我的fluent地图中遗漏了主键的第二段:

this.HasKey(t => t.Id);
奇怪的是,模型工作了,但在某些情况下抛出了异常,很难理解为什么。显然,当EF加载子实体的父实体时,有多个父实体,因为键不仅有Id,还有日期。决议将包括关键问题的第二部分:

this.HasKey(t => new { t.Id, t.Date });
帮助我找出问题的工具是EF电动工具,目前它在Beta 3中。该工具为EF上下文类提供上下文菜单,其中一项是视图实体模型DDL SQL。尽管我可以通过检查代码来发现这一点,但该工具很好地显示了EF模型与实际数据库的匹配程度


我相信你得到这个例外是因为某种原因关系的多样性被破坏了。在我的例子中,它是不正确的映射,在你的例子中,它可能是其他的东西,我看不出你的代码

我认为问题可能在于您假设每个用户只有一个消费者,而这在数据方面是不正确的


我也遇到了同样的问题,这是因为这种关系与许多人有关,而我是一对一的。

我认为问题可能在于您假设每个用户只有一个消费者,而这在数据方面是不正确的


我也有同样的问题,这是因为这段关系涉及到很多人,我是一对一的。

请参阅我对你的另一个问题的评论()。它是否与
消费者
用户
之间的一对一映射相同?我的猜测是映射不正确,这可能是两个问题的原因。请参阅我对其他问题的评论()。它是否与
消费者
用户
之间的一对一映射相同?我的猜测是映射不正确,这可能是这两个问题的原因。