2011-10-10 158 views
0

我有这种情况:NHibernate的多列映射集

我有TABLE_1,TABLE_2 ... table_n,它们属于不同的数据,但他们的共同点,RECORD_ID某些领域,form_id其中id是主要的几个表键。所有这些表是由一个单独的类记录表示(ID,表格,属性)

我已经attachment_id,RECORD_ID,form_id另一个表tbl_attachments(RECORD_ID是不够的,因为RECORD_ID可以重复以上TABLE_X表。

我的问题是,我想在课堂记录财产的附件,从tbl_attachments获得记录的附件(如有)。

你能帮我与NHibernate的映射来完成这件事?

我感谢任何帮助。

编辑:忘了说,在TABLE_X一个记录可以有多个附件:)

回答

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"); 
    } 
} 

UPDATE实现这一点: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> 
+0

FIRO,谢谢(x => x.Attachments) .Where(“Form_Id = 5”);这是一个快速响应,我使用hbm xml文件,你会让我知道如何映射HasMany在一个HBM文件? –

+0

非常感谢您的帮助,这就是我一直在寻找的。它工作完美。 –