C# Nhibernate';具有相同标识符值的不同对象';问题

C# Nhibernate';具有相同标识符值的不同对象';问题,c#,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,我有一个更新用户实体的计划进程。此用户实体与角色对象有多人多的关系 public class UserMappingOverride : IAutoMappingOverride<User> { public void Override(AutoMapping<User> mapping) { mapping.HasManyToMany(u => u.Roles) .Access.ReadOnlyPrope

我有一个更新用户实体的计划进程。此用户实体与角色对象有多人多的关系

 public class UserMappingOverride : IAutoMappingOverride<User>
 {
    public void Override(AutoMapping<User> mapping)
    {
        mapping.HasManyToMany(u => u.Roles)
            .Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.None)
            .AsSet()
            .Cascade.SaveUpdate();        
    }
 }
…和用户(省略不相关的部分):

当流程运行时,它会成功地运行到某一点,之后循环的每个后续迭代都会产生以下结果:

  NHibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 0, of entity: MyProject.Core.Domain.UserRole
 at NHibernate.Engine.StatefulPersistenceContext.CheckUniqueness(EntityKey    key, Object obj)
所以问题是-为什么这个错误只会在某一点之后发生,我能做些什么来解决它?我见过Merge在类似的问题上提到过这种类型的问题——这在这里适用吗?

也许只是一个提示

我在这里看到的要点是:

  • 现在有了角色对象(只有一些
    enum
  • 因此,没有多对多
如果这是真的,我们将有如下对象:

public class User : Entity
{
    ISet<UserRole> _roles = new HashSet<UserRole>();
    public virtual ISet<UserRole> Roles
    {
        get { return _roles }
    }
    ...
}
它可以映射为HasMany(一对多)

现在它应该可以工作了,我们只需要分配两端

userRole.User = user;
user.Roles.Add(userRole);

能否显示您的实体和两个集合的映射(如果有UserRole实体,则显示所有三个集合)@RadimKöhler添加了UserRole实体和用户实体的相关部分我不理解UserRole(EnumEntity)。它是用户和角色之间的配对对象吗?它是否具有属性
User-User{get;set;}
Role-Role{get;set;}
?@RadimKöhler有一个UserRoleToUser表,该表保存针对用户的实际角色枚举(即该表有两列:UserFk和UserRoleFk)。我们正在使用AutoMap,我认为这个表是通过一个级联(ConventionBuilder.HasManyToMany.Always(r=>r.Cascade.All())填充的,这就是我的观点。。。如果有多对多(并将表与FK配对),我们就没有内部对象在起作用。。。无
UserRole
。只要
用户
拥有
角色
集合,
角色
集合就可以拥有
用户
。。。
  NHibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 0, of entity: MyProject.Core.Domain.UserRole
 at NHibernate.Engine.StatefulPersistenceContext.CheckUniqueness(EntityKey    key, Object obj)
public class User : Entity
{
    ISet<UserRole> _roles = new HashSet<UserRole>();
    public virtual ISet<UserRole> Roles
    {
        get { return _roles }
    }
    ...
}
public class UserRole : Entity
{
    public virtual User User { get; set; }
    public RoleEnum Role { get; set; }
}
mapping.HasMany(u => u.Roles)
    ...
    .AsSet()
    .Inverse()
    .Cascade.SaveUpdate(); 
userRole.User = user;
user.Roles.Add(userRole);