2

エンティティ オブジェクトをビュー モデルにマップしようとしている次のクラスがあります。

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>

ただし、次のコードでマッピングを実行すると:

var model = new ConsumerIndexModel();
var list = _repository.List().Where(c => c.Parent == null).ToList();
model.MapFromEntityList(list);
return View(model);

の行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イミディエイト ウィンドウで実行すると、予想されるユーザー名の値が得られます。ここで何が問題なのですか?

4

2 に答える 2

0

問題は、データに関しては正しくないのに、すべてのユーザーに消費者が 1 人しかいないと考えていることだと思います。

私も同じ問題を抱えていました。それは、関係が多対多であり、1対1にしたためです。

于 2013-05-08T23:17:36.920 に答える