通过代码ManyToMany实现NHibernate映射 问题
我使用NHibernate代码映射来映射关系。在本例中,我将用户映射到角色到权限。用户和角色处于n:m关系中,角色和权限也是如此。SQL数据库是SQL Server。 如果我从我的代码中删除角色和权限之间的n:m relationshop,我的代码就会正常工作。如果存在,我将得到以下通过代码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
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)
放在何处,这样序列化对象不会因为循环引用而导致异常。我刚才在发布问题时遇到的另一个问题是:使用###标记三级标题(而不是上面使用的~~),编辑认为找到了未标记的代码,不让我发布。我应该联系谁(以及如何)来查看此内容?尝试搜索。。。可能有人已经发布了关于降价问题的帖子。我刚刚发布这个问题时遇到的另一个问题是:使用###标记三级标题(而不是上面使用的~~),编辑器认为找到了未标记的代码,不允许我发布。我应该联系谁(以及如何)来查看此内容?尝试搜索。。。可能已经有人发布了关于降价的消息。