C# Fluent NHibernate对象化/关联关系映射
好的,我对Fluent和NHibernate很陌生,我不知道如何映射数据库中存在的这种特定关系。下面的ER图概述了我的表结构 下面是我当前的C#实体类和Fluent映射:C# Fluent NHibernate对象化/关联关系映射,c#,fluent-nhibernate,C#,Fluent Nhibernate,好的,我对Fluent和NHibernate很陌生,我不知道如何映射数据库中存在的这种特定关系。下面的ER图概述了我的表结构 下面是我当前的C#实体类和Fluent映射: public class GroupHeader { public virtual Guid Id { get; private set;} public virtual string Name { get; set; } public virtual string Description { get
public class GroupHeader
{
public virtual Guid Id { get; private set;}
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual IList<RightHeader> AllowedRights { get; set; }
public virtual IList<RightHeader> DeniedRights { get; set; }
public virtual IList<RightHeader> UnsetRights { get; set; }
}
public class RightHeader
{
public virtual decimal Num { get; private set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}
public class GroupHeaderMap : ClassMap<GroupHeader>
{
public GroupHeaderMap()
{
Table("GROUP_HEADER");
Id(x => x.Id, "GROUP_ID");
Map(x => x.Name, "GROUP_NAME").Unique();
Map(x => x.Description, "GROUP_DESCRIPTION");
HasManyToMany(x => x.AllowedRights)
.Table("GROUP_RIGHT_COMPOSITE")
.ParentKeyColumn("GROUP_ID")
.ChildKeyColumn("RIGHT_NUM")
.Where("RIGHT_VALUE = 1")
.Cascade.SaveUpdate();
HasManyToMany(x => x.DeniedRights)
.Table("GROUP_RIGHT_COMPOSITE")
.ParentKeyColumn("GROUP_ID")
.ChildKeyColumn("RIGHT_NUM")
.Where("RIGHT_VALUE = -1")
.Cascade.SaveUpdate();
HasManyToMany(x => x.UnsetRights)
.Table("GROUP_RIGHT_COMPOSITE")
.ParentKeyColumn("GROUP_ID")
.ChildKeyColumn("RIGHT_NUM")
.Where("RIGHT_VALUE = 0")
.Cascade.SaveUpdate();
}
}
public class RightHeaderMap : ClassMap<RightHeader>
{
public RightHeaderMap()
{
Table("RIGHT_HEADER");
Id(x => x.Num, "RIGHT_NUM");
Map(x => x.Name, "RIGHT_NAME");
Map(x => x.Description, "RIGHT_DESCRIPTION");
}
}
public类GroupHeader
{
公共虚拟Guid Id{get;private set;}
公共虚拟字符串名称{get;set;}
公共虚拟字符串描述{get;set;}
公共虚拟IList允许的权限{get;set;}
公共虚拟IList拒绝权限{get;set;}
公共虚拟IList权限{get;set;}
}
公共类右标题
{
公共虚拟十进制数{get;private set;}
公共虚拟字符串名称{get;set;}
公共虚拟字符串描述{get;set;}
}
公共类GroupHeaderMap:ClassMap
{
公共组头映射()
{
表(“组标题”);
Id(x=>x.Id,“组Id”);
Map(x=>x.Name,“GROUP_Name”).Unique();
地图(x=>x.描述,“组描述”);
HasManyToMany(x=>x.AllowedRights)
.表格(“组右组合”)
.ParentKeyColumn(“组ID”)
.ChildKeyColumn(“右键”)
.式中(“右值=1”)
.Cascade.SaveUpdate();
HasManyToMany(x=>x.DeniedRights)
.表格(“组右组合”)
.ParentKeyColumn(“组ID”)
.ChildKeyColumn(“右键”)
.式中(“右_值=-1”)
.Cascade.SaveUpdate();
HasManyToMany(x=>x.0)
.表格(“组右组合”)
.ParentKeyColumn(“组ID”)
.ChildKeyColumn(“右键”)
.式中(“右值=0”)
.Cascade.SaveUpdate();
}
}
公共类RightHeaderMap:ClassMap
{
公共右翼领袖
{
表格(“右标题”);
Id(x=>x.Num,“RIGHT_Num”);
Map(x=>x.Name,“RIGHT_Name”);
地图(x=>x.描述,“右描述”);
}
}
当前,每当我创建一个新的GroupHeader并填充AllowedRights成员变量时,它都无法插入这些记录,因为GROUP_RIGHT_COMPOSITE中的RIGHT_VALUE列不允许空值。我真的不知道如何在fluent中映射,或者在实体中应该在哪里处理这个问题。任何帮助都将不胜感激。我发现上述映射存在的问题是,我试图将用户组组合表视为一种关系,而不是实体本身。我已经修改了上面的代码,这样一个名为GroupRight的新实体就存在了,并且在该实体中同时引用了GroupHeader和RightHeader 我认为这解决了我应该如何映射这些数据的总体问题,但我仍然存在将这些数据持久化到数据库的问题。我修改过的问题(包括对我的实体和映射的更新)可以在这里找到 我发现有助于解决此问题的文章有: