我遇到这种情况:
我有几个表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上的记录可以有多个附件:)
答案 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>