【问题标题】:Fluent NHibernate Objectified/Associated Relationship MappingFluent NHibernate 对象化/关联关系映射
【发布时间】: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


    【解决方案1】:

    我在上述映射中发现的问题是我试图将 USER_GROUP_COMPOSITE 表视为关系而不是实体本身。我已经修改了上面的代码,使得存在一个名为 GroupRight 的新实体,并且在实体中引用了 GroupHeader 和 RightHeader。

    我认为这解决了我应该如何映射这些的整体问题,但我仍然无法将这些数据持久化到数据库中。我修改后的问题(包括对我的实体和映射的更新)可以在这里找到Post

    我发现对解决这个问题有用的文章是: Link 1 Link 2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 2011-10-26
      • 1970-01-01
      • 2011-07-11
      • 2011-12-01
      • 2012-06-12
      相关资源
      最近更新 更多