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