Я получаю следующее сообщение об ошибке:Не удается разрешить свойство: Id
NHibernate.HibernateException: NHibernate.HibernateException: Unable to resolve property: Id.
Эта ошибка возникает из следующей строки кода:
User userFound = session.QueryOver<User>()
.Where(x => x.Id == testObjects.TestUser.Id)
.SingleOrDefault();
Мои сокращенных отображений следующим образом:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("USER_HEADER");
Id(x => x.Id, "USER_ID")
.GeneratedBy.Foreign("UserLocation");
HasOne(x => x.UserLocation)
.PropertyRef(x => x.Id)
.Cascade.All();
}
}
public class LocationMap : ClassMap<Location>
{
public LocationMap()
{
Table("LOC_HEADER");
Id(x => x.Id, "LOC_ID");
HasOne(x => x.User)
.PropertyRef(x => x.Id);
}
}
Я был в состоянии запросить объект пользователя, прежде чем я добавил эту связь, чтобы Location
так что я знаю это как-то связано с этим, но я не уверен, что именно. Я могу успешно создать объект User
, привязанный к Location
, но не могу запросить его. Использование ISession.Get
создает ту же ошибку, что и вышеуказанный оператор QueryOver.
Ниже общий тест блок я бегу, что не удается:
public void Can_Create_User()
{
using (NHibernate.ISession session = SessionFactory.GetCurrentSession())
{
using (NHibernate.ITransaction tran = session.BeginTransaction())
{
session.Save(testObjects.TestValidationDetail);
session.Save(testObjects.TestUser);
tran.Commit();
}
}
using (NHibernate.ISession session = SessionFactory.GetCurrentSession())
{
User userFound = session.QueryOver<User>().Where(x => x.Id == testObjects.TestUser.Id).SingleOrDefault();
Assert.IsNotNull(userFound);
Assert.AreEqual(userFound.Id, userFound.UserLocation.Id);
}
}
В моем случае я предполагал, что удаленная ссылка не является основным ключом - в основном то же самое. Спасибо за сообщение! – Jonno
Да, это сработало для меня тоже, я использовал генератор карт Nhibernate, и он сгенерировал отображение в качестве ссылок на свойства, когда это не было необходимо, потому что Property на самом деле является идентификатором. – Daniel