#nhibernate
#nhibernate
Вопрос:
У меня такая ситуация:
У меня есть несколько таблиц table_1, table_2 … table_n, они принадлежат разным данным, но у них есть несколько общих полей, record_id, form_id, где id является первичным ключом. Все эти таблицы представлены одной записью класса (идентификатор, форма, атрибуты)
У меня есть другая таблица tbl_attachments, которая имеет attachment_id, record_id, form_id (record_id недостаточно, потому что record_id может повторяться над таблицами table_X.
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу иметь вложения свойств в записи класса, чтобы получать вложения записей из tbl_attachments, если таковые имеются.
Можете ли вы помочь мне с сопоставлением в nhibernate, чтобы это сделать?
Я ценю любую помощь.
Редактировать: Забыл сказать, что запись в table_X может иметь несколько вложений 🙂
Ответ №1:
вы можете добиться этого с помощью 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>
Комментарии:
1. Фиро, спасибо за быстрый ответ, я использую XML-файлы hbm, не могли бы вы сообщить мне, как сопоставить hasMany (x => x.Вложения). Где («Form_Id = 5»); в файле hbm?