【发布时间】:2010-11-04 20:28:41
【问题描述】:
好的,我对 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; 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");
}
}
目前,每当我创建一个新的 GroupHeader 并填充 AllowedRights 成员变量时,它都无法插入这些记录,因为 GROUP_RIGHT_COMPOSITE 中的 RIGHT_VALUE 列不允许空值。我不确定如何流畅地映射它,或者我应该在我的实体中真正处理它的位置。任何帮助将不胜感激。
【问题讨论】:
标签: c# fluent-nhibernate