Я думал, что это будет легко найти, но у меня проблемы. У меня есть класс, который наследуется от класса EntityBase, который имеет поле ID. базовый класс выглядит следующим образом.Перевернутый столбец при сопоставлении с NHibernate
//Here is the declaration
public abstract class EntityBase<IdType>
//here is the property
private IdType _id;
public virtual IdType ID
{
get
{
return _id;
}
set
{
_id = value;
}
}
Это отлично работает для большинства субъектов, но у нас есть объект, который на самом деле будет построен из хранимой процедуры, которая работает на другую БД, и проблема, в отличии от нашей БД возвращает «Id» не «ID» У меня есть попробовал несколько вещей, чтобы переопределить это и установить идентификатор, но я получаю следующее сообщение об ошибке
NHibernate.PropertyNotFoundException: не удалось найти Присваиватель свойства «Id» в классе
public class ListingMapping : IAutoMappingOverride<Listing>
{
public void Override(AutoMapping<Listing> mapping)
{
mapping.Map(x => x.ID).Column("Id");
mapping.Id(x => x.ID).Column("Id");
}
}
Вот как объект становится создано.
public Listing GetListingById(Guid ListingId)
{
IQuery query = GetSession().GetNamedQuery("GetListingById")
.SetParameter("ListingId", ListingId)
.SetResultTransformer(Transformers.AliasToBean<Listing>());
return (query.UniqueResult<Listing>());
}
Я знаю, что автоматические сопоставления загружаются, потому что они работают для других типов, где мы переопределяем схему. Надеюсь, это достаточно информации, и кто-то может указать мне в правильном направлении.
Да, в конце концов, я получил кто-то, чтобы изменить хранимую процедуру. Я подозревал, что сопоставления ничего не сделали в этом случае, однако спасибо за подтверждение этого. – Kenn
Это решило мою проблему !! В моем случае имя свойства было как ContactCode, но я использовал CreateSQLQuery и передавал псевдоним моего свойства без кавычек. После проведения кавычек моя проблема была решена. Большое спасибо за этот ответ !!! –