通过代码ManyToMany实现NHibernate映射 问题

通过代码ManyToMany实现NHibernate映射 问题,nhibernate,many-to-many,nhibernate-mapping,mapping-by-code,Nhibernate,Many To Many,Nhibernate Mapping,Mapping By Code,我使用NHibernate代码映射来映射关系。在本例中,我将用户映射到角色到权限。用户和角色处于n:m关系中,角色和权限也是如此。SQL数据库是SQL Server。 如果我从我的代码中删除角色和权限之间的n:m relationshop,我的代码就会正常工作。如果存在,我将得到以下MappingException: Could not determine type for: Dtp.Entities.AppPrivilege, Dtp.Entities, for columns: NHibe

我使用NHibernate代码映射来映射关系。在本例中,我将用户映射到角色到权限。用户和角色处于n:m关系中,角色和权限也是如此。SQL数据库是SQL Server。 如果我从我的代码中删除角色和权限之间的n:m relationshop,我的代码就会正常工作。如果存在,我将得到以下
MappingException

Could not determine type for: 
Dtp.Entities.AppPrivilege, Dtp.Entities, for columns: NHibernate.Mapping.Column(id)
我找不到差异的来源,因为用户和角色之间的相同关系可以顺利工作。有人能解释一下这个问题吗

产生错误的确切部分(如果注释掉它就会消失)是
AppRole.AppPrivileges
的包

麦可德 应用程序用户 ~~~桌子~~~

AppUserId, uniqueidentifier, not null
//some omitted properties
AppUserId, uniqueidentifier, not null
AppRoleId, uniqueidentifier, not null
AppRoleId, uniqueidentifier, not null
//some omitted properties
AppRoleId, uniqueidentifier, not null
AppPrivilegeId, uniqueidentifier, not null
AppPrivilegeId, uniqueidentifier, not null
//some omitted properties
~~~实体~~~

public class AppUser {
    public virtual Guid AppUserId { get; set; }
    //some omitted properties
    public virtual IList<AppRole> AppRoles { get; set; }
}
public class AppRole{
    public virtual Guid AppRoleId { get; set; }
    //some omitted properties
    public virtual IList<AppUser> AppUsers { get; set; }
    public virtual IList<AppPrivilege> AppPrivileges { get; set; }
}
public class AppPrivilege {
    public virtual Guid AppPrivilegeId { get; set; }
    //some omitted properties
    public virtual IList<AppRole> AppRoles { get; set; }
}
平易近人 ~~~桌子~~~

AppUserId, uniqueidentifier, not null
//some omitted properties
AppUserId, uniqueidentifier, not null
AppRoleId, uniqueidentifier, not null
AppRoleId, uniqueidentifier, not null
//some omitted properties
AppRoleId, uniqueidentifier, not null
AppPrivilegeId, uniqueidentifier, not null
AppPrivilegeId, uniqueidentifier, not null
//some omitted properties
~~~实体~~~

public class AppUser {
    public virtual Guid AppUserId { get; set; }
    //some omitted properties
    public virtual IList<AppRole> AppRoles { get; set; }
}
public class AppRole{
    public virtual Guid AppRoleId { get; set; }
    //some omitted properties
    public virtual IList<AppUser> AppUsers { get; set; }
    public virtual IList<AppPrivilege> AppPrivileges { get; set; }
}
public class AppPrivilege {
    public virtual Guid AppPrivilegeId { get; set; }
    //some omitted properties
    public virtual IList<AppRole> AppRoles { get; set; }
}
应用特权 ~~~桌子~~~

AppUserId, uniqueidentifier, not null
//some omitted properties
AppUserId, uniqueidentifier, not null
AppRoleId, uniqueidentifier, not null
AppRoleId, uniqueidentifier, not null
//some omitted properties
AppRoleId, uniqueidentifier, not null
AppPrivilegeId, uniqueidentifier, not null
AppPrivilegeId, uniqueidentifier, not null
//some omitted properties
~~~实体~~~

public class AppUser {
    public virtual Guid AppUserId { get; set; }
    //some omitted properties
    public virtual IList<AppRole> AppRoles { get; set; }
}
public class AppRole{
    public virtual Guid AppRoleId { get; set; }
    //some omitted properties
    public virtual IList<AppUser> AppUsers { get; set; }
    public virtual IList<AppPrivilege> AppPrivileges { get; set; }
}
public class AppPrivilege {
    public virtual Guid AppPrivilegeId { get; set; }
    //some omitted properties
    public virtual IList<AppRole> AppRoles { get; set; }
}
公共类AppPrivilege{
公共虚拟Guid AppPrivilegeId{get;set;}
//一些省略性质
公共虚拟IList程序{get;set;}
}
~~~映射~~~

public class AppUserMap : ClassMapping<AppUser>
{
    public AppUserMap()
    {
        Table("AppUser");
        Schema("dbo");
        Lazy(true);
        Id(x => x.AppUserId, map => map.Generator(Generators.GuidComb));
        //some omitted properties
        Bag(x => x.AppRoles,
            colmap => {
                colmap.Cascade(Cascade.None);
                colmap.Table("AppUser_AppRole");
                colmap.Key(x => x.Column("AppUserId"));
            },
            map => map.ManyToMany(many => many.Column("AppRoleId")));
    }
}
public class AppRoleMap : ClassMapping<AppRole> {

    public AppRoleMap()
    {
        Table("AppRole");
        Schema("dbo");
        Lazy(true);
        Id(x => x.AppRoleId, map => map.Generator(Generators.GuidComb));
        //some omitted properties
        Bag(x => x.AppUsers, 
            colmap => {
                colmap.Cascade(Cascade.None);
                colmap.Table("AppUser_AppRole");
                colmap.Key(x => x.Column("AppRoleId"));
            }, 
            map => map.ManyToMany(many => many.Column("AppUserId")));
        //The following definition produces the bug.
        Bag(x => x.AppPrivileges,
            colmap => {
                colmap.Cascade(Cascade.None);
                colmap.Table("AppRole_AppPrivilege");
                colmap.Key(x => x.Column("AppRoleId"));
            },
            map => map.ManyToMany(many => many.Column("AppPrivilegeId")));
    }
}
public class AppPrivilegeMap: ClassMapping<AppPrivilege> {

    public AppPrivilegeMap()
    {
        Table("AppPrivilege");
        Schema("dbo");
        Lazy(true);
        Id(x => x.AppPrivilegeId, map => map.Generator(Generators.GuidComb));
        //some omitted properties
        Bag(x => x.AppRoles,
            colmap => {
                colmap.Cascade(Cascade.None);
                colmap.Table("AppRole_AppPrivilege");
                colmap.Key(x => x.Column("AppPrivilegeId"));
            },
            map => map.ManyToMany(many => many.Column("AppRoleId")));
    }
}
公共类AppPrivilegMap:ClassMapping{
公共应用程序权限映射()
{
表(“AppPrivilege”);
模式(“dbo”);
懒惰(真);
Id(x=>x.AppPrivilegeId,map=>map.Generator(Generators.GuidComb));
//一些省略性质
袋(x=>x.AppRoles,
colmap=>{
colmap.Cascade(Cascade.None);
colmap.Table(“AppRole_AppPrivilege”);
Key(x=>x.Column(“AppPrivilegeId”);
},
map=>map.ManyToMany(many=>many.Column(“AppRoleId”));
}
}

在上述文件中找不到此问题的答案。在
NHibernateHelper.OnConfigure()期间,我忘了将
AppPrivilegeMap
添加到
ModelMapper


现在,最后一项任务是找出将
.Inverse(true)
放在哪里,这样序列化对象不会因为循环引用而导致异常。

在上面的文件中找不到这个问题的答案。在
NHibernateHelper.OnConfigure()期间,我忘了将
AppPrivilegeMap
添加到
ModelMapper


现在,最后一项任务是找出将
.Inverse(true)
放在何处,这样序列化对象不会因为循环引用而导致异常。

我刚才在发布问题时遇到的另一个问题是:使用###标记三级标题(而不是上面使用的~~),编辑认为找到了未标记的代码,不让我发布。我应该联系谁(以及如何)来查看此内容?尝试搜索。。。可能有人已经发布了关于降价问题的帖子。我刚刚发布这个问题时遇到的另一个问题是:使用###标记三级标题(而不是上面使用的~~),编辑器认为找到了未标记的代码,不允许我发布。我应该联系谁(以及如何)来查看此内容?尝试搜索。。。可能已经有人发布了关于降价的消息。