C# NHibernate多对多,无法删除行

C# NHibernate多对多,无法删除行,c#,.net,nhibernate,orm,C#,.net,Nhibernate,Orm,我有以下实体:Project、ProjectMapping和User,这是许多映射: public ProjectMembershipMapping() { Property(pm => pm.IsAccepted, prop => prop.NotNullable(true)); Property(pm => pm.Permission, prop => prop.NotNullable(true)); ManyToOne(pm => pm

我有以下实体:Project、ProjectMapping和User,这是许多映射:

public ProjectMembershipMapping()
{
    Property(pm => pm.IsAccepted, prop => prop.NotNullable(true));
    Property(pm => pm.Permission, prop => prop.NotNullable(true));
    ManyToOne(pm => pm.Member, mapping =>
                                   {
                                       mapping.Lazy(LazyRelation.NoLazy);
                                       mapping.Cascade(Cascade.All);
                                   });
    ManyToOne(pm => pm.Project, mapping =>
                                    {
                                        mapping.Lazy(LazyRelation.NoLazy);
                                        mapping.Cascade(Cascade.All);
                                    }); 

    ComposedId(pm =>                                          
                   {
                       pm.ManyToOne(prop => prop.Member);
                       pm.ManyToOne(prop => prop.Project);
                   });
}

public ProjectMapping()
{   
    Set(proj => proj.Members,
            mapping =>
            {
                mapping.Lazy(CollectionLazy.NoLazy);
                mapping.Inverse(false);
                mapping.Cascade(Cascade.All);
                mapping.Table("ProjectMembership");
                mapping.Key(k => k.Column("Project"));
            },
            action => action.OneToMany()
        );      
}

public class DevcoopUserMapping : ClassMapping<DevcoopUser>
{
        Bag(user => user.ProjectMemberships, 
            mapping =>
                {
                    mapping.Lazy(CollectionLazy.NoLazy);
                    mapping.Inverse(false);
                    mapping.Cascade(Cascade.All);
                    mapping.Table("ProjectMembership");
                    mapping.Key(k => k.Column("Member"));
                },
            action => action.OneToMany());
}
另一方面,当我第一次尝试从Project和User中删除此ProjectMembership实例时(我按照建议从关联中删除它),我得到了异常:

could not delete collection: [devcoop.Daos.Project.Members#1][SQL: UPDATE ProjectMembership SET Project = null WHERE Project = @p0]

有人能帮忙吗?应该是我把映射搞砸了,但我不知道这会是什么。

在删除ProjectMembership实例之前,请将其从DevcoopUser.ProjectMemberships和Project.Members-collections中删除

我认为这应该是可行的:

  membership.Member.ProjectMemberships.Remove(membership);
  membership.Project.Members.remove(membership);
  session.Delete(membership);

我认为您应该从ProjectMembership映射中删除CascadeAll。我不完全确定,但我认为这会将删除级联到使用CascadeAll映射的集合中的所有成员和项目,这可能是您不希望发生的。

问题在于我现在得到的这些映射导致异常:无法删除集合:[devcoop.Daos.Project.members#1][SQL:UPDATE-ProjectMembership-SET-Project=null,其中Project=@p0]正如我在问题中所写的。在尝试删除ProjectMembership实例之前是否保存用户和项目实体?如果是这样,请尝试在保存用户和项目之前删除ProjectMembership。我不明白NH为什么尝试更新ProjectMembership表。我仅通过在3中使用hql查询成功删除项目交易,嗯,这是一个混乱的解决办法,不是一个解决方案。在NHibernate中有关于多对多的“最佳实践”吗?因为我显然在这些映射上搞砸了什么,但我找不到确切的方法
  membership.Member.ProjectMemberships.Remove(membership);
  membership.Project.Members.remove(membership);
  session.Delete(membership);