NHibernate多列映射集合

时间:2011-10-10 22:46:55

标签: nhibernate

我遇到这种情况:

我有几个表table_1,table_2 ... table_n,它们属于不同的数据,但它们有一些共同的字段,record_id,form_id,其中id是主键。所有这些表都由单个类Record(Id,Form,Attributes)

表示

我有另一个表tbl_attachments,它有attachment_id,record_id,form_id(record_id是不够的,因为record_id可以在table_X表上重复。

我遇到的问题是我想在类Record中拥有属性附件,以获取tbl_attachments中的记录附件(如果有的话)。

你能帮助我完成nhibernate的映射吗?

我感谢任何帮助。

编辑:忘了说table_X上的记录可以有多个附件:)

1 个答案:

答案 0 :(得分:0)

您可以使用AnyMapping

实现此目的
abstract class RecordBase
{
    public virtual int Id { get; set; }

    public virtual int FormId { get; set; }
    public virtual ICollection<Attachment> Attachments { get; set; }
}

class RecordA : RecordBase
{ }

class Attachment
{
    public virtual int id { get; set; }

    public virtual RecordBase Record { get; set; }
}

class RecordAMap : ClassMap<RecordA>
{
    public RecordAMap()
    {
        HasMany(x => x.Attachments)
            .Where("Form_Id = 5");
    }
}

class AttachmentMap : ClassMap<Attachment>
{
    public AttachmentMap()
    {
        ReferencesAny(x => x.Record)
            .EntityIdentifierColumn("record_id")
            .EntityTypeColumn("form_id")
            .IdentityType<int>()
            .AddMetaValue<RecordA>("5");
    }
}

更新:xml映射

<bag where="form_id=5">
  <key column="record_id"/>
  <one-to-many class="Attachment1"/>
</bag>

<any name="Item" id-type="System.Int32" meta-type="System.Int32">
  <column name="form_id" />
  <column name="record_id" />
</any>