Прежде всего, извините за мой плохой английский.
Я работаю над проектом, и мне нужно сопоставить некоторые устаревшие таблицы с новой системой, работающей с Nhibernate.
Эта система имеет общую таблицу (DAT_DADO_EXTRA) для хранения предоставленных клиентом данных, используя ключ (ENTIDADE_RELACIONADA), чтобы узнать, с какими данными таблицы связаны, и идентификатор (ID_ENTIDADE_RELACIONADA), чтобы узнать, с кем это связано.
Я исключил дополнительные столбцы в обеих таблицах / классах, чтобы сделать пример коротким
Мои классы и карты ниже:
public class ExtraData : Entity
{
public ExtraData()
{
}
/// <inheritdoc />
public ExtraData(string key, IRobotRunEntry runEntry) : base(key, runEntry)
{
}
public virtual string DataDescription { get; set; }
public virtual int RelatedEntityId { get; set; }
public virtual string RelatedEntityType { get; set; }
public virtual string Value { get; set; }
}
и карта
public ExtractDataMap() : EntityMap<ExtraData>
{
Table("DAT_DADO_COMPLEMENTAR");
Map(p => p.RelatedEntityId).Column("ID_ENTIDADE_RELACIONADA").Not.Nullable();
Map(p => p.RelatedEntityType).Column("ENTIDADE_RELACIONADA").Not.Nullable();
Map(p => p.DataDescription).Column("DESCRICAO").Not.Nullable();
Map(p => p.Value).Column("VALOR").Not.Nullable();
}
тогда я получил класс под названием Document
public class Document : Entity
{
/// <inheritdoc />
public Document()
{
ExtraData = new HashSet<ExtraData>();
}
/// <inheritdoc />
public Document(string key, IRobotRunEntry runEntry) : base(key, runEntry)
{
ExtraDataList = new HashSet<ExtraData>();
}
public virtual ISet<ExtraData> ExtraDataList { get; set; }
}
и карта
public DocumentMap() : EntityMap<ExtraData>
{
Table("DAT_DOCUMENTO_RC");
Map(p => p.Code).Column("CODIGO").Nullable();
Map(p => p.BeneficiaryUnityCode).Column("CODIGO_UNIDADE_BENEFICIARIO");
Map(p => p.BeneficiaryCardCode).Column("CARTEIRA_BENEFICIARIO");
References(p => p.Beneficiary).Column("ID_BENEFICIARIO").Nullable().Index("IDX_DOCUMENTO_RC_BENEFICIARIO");
HasMany(p => p.Services).Cascade.AllDeleteOrphan().Fetch.Select().LazyLoad();
HasMany(p => p.ExtraData) **????**;
}
У меня такой вопрос: как я могу отобразить отношения между Document и ExtraData, зная, что мне нужно использовать фиксированное значение (RelatedEntityType) для объединения этих таблиц?
Пример запроса для иллюстрации отношения:
session.Query<ExtraData>()
.Where(p => p.RelatedEntityType == "DOCUMENTO"
&& p.RelatedEntityId == 95)
.ToList();
Опять, извините за мой плохой английский:)