NHibernate多列映射集合

NHibernate多列映射集合,nhibernate,Nhibernate,我有这样的情况: 我有几张桌子桌子桌子1,桌子2。。。表n,它们属于不同的数据,但它们有一些共同的字段,记录id,表单id,其中id是主键。所有这些表都由一个类记录(Id、表单、属性)表示 我还有另一个表tbl_attachments,它有附件id、记录id、表单id(记录id不够,因为记录id可以在表X表上重复) 我的问题是我希望在类记录中有属性附件,以便从tbl_附件(如果有)获取记录附件 你能帮我在nhibernate上绘制地图吗 谢谢你的帮助 编辑:忘了说表X上的记录可以有多个附件:)您

我有这样的情况:

我有几张桌子桌子桌子1,桌子2。。。表n,它们属于不同的数据,但它们有一些共同的字段,记录id,表单id,其中id是主键。所有这些表都由一个类记录(Id、表单、属性)表示

我还有另一个表tbl_attachments,它有附件id、记录id、表单id(记录id不够,因为记录id可以在表X表上重复)

我的问题是我希望在类记录中有属性附件,以便从tbl_附件(如果有)获取记录附件

你能帮我在nhibernate上绘制地图吗

谢谢你的帮助


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

您可以使用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");
    }
}
抽象类记录库
{
公共虚拟整数Id{get;set;}
公共虚拟int FormId{get;set;}
公共虚拟ICollection附件{get;set;}
}
RecordA类:记录库
{ }
班级附件
{
公共虚拟整数id{get;set;}
公共虚拟记录库记录{get;set;}
}
类记录映射:类映射
{
公共记录
{
HasMany(x=>x.Attachments)
。其中(“表格Id=5”);
}
}
类AttachmentMap:ClassMap
{
公共附件地图()
{
引用任意(x=>x.Record)
.EntityIdentifierColumn(“记录id”)
.EntityTypeColumn(“表单id”)
.IdentityType()
.AddMetaValue(“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>


Firo,感谢您的快速响应,我使用的是hbm xml文件,您能告诉我如何映射HasMany(x=>x.Attachments)。其中(“Form_Id=5”);关于hbm文件?非常感谢您的帮助,这就是我要找的。它工作得很好。