Col*_*e W 3 nhibernate fluent-nhibernate
我收到以下错误消息:
NHibernate.HibernateException: NHibernate.HibernateException: Unable to resolve property: Id.
Run Code Online (Sandbox Code Playgroud)
从以下代码行抛出此错误:
User userFound = session.QueryOver<User>()
.Where(x => x.Id == testObjects.TestUser.Id)
.SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
我的缩写映射如下:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
在添加此关系之前,我能够查询User对象,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);
}
}
Run Code Online (Sandbox Code Playgroud)
事实证明这是由于我错误地使用造成的PropertyRef.在我的实例中,我不需要使用它.生成错误是因为没有命名属性Id但是有一个名为的ID Id.我通过将映射更改为:
HasOne(x => x.UserLocation)
.PropertyRef(x => x.Id)
.Cascade.All();
Run Code Online (Sandbox Code Playgroud)
至
HasOne(x => x.UserLocation)
.Cascade.All();
Run Code Online (Sandbox Code Playgroud)
和
HasOne(x => x.User)
.PropertyRef(x => x.Id);
Run Code Online (Sandbox Code Playgroud)
至
HasOne(x => x.User)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2432 次 |
| 最近记录: |