我一直在关注Bruno的优秀article,以实现流畅的Nhibernate中的一对一映射。然而,我遇到了一个小麻烦,同时映射了一个不明确的错误的私有实体。这里是我的实体,映射和错误:Reveal.Member问题与Fluent和Nhibernate映射一对一映射
实体
public class Student
{
public virtual String Studentid { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
private String StudentId { get; set; }
private Student Student { get; set; }
public Address(Student student)
{ Student = student; }
}
映射:
public StudentMap()
{
Id(x => x.Studentid).GeneratedBy.Assigned();
HasOne(x => x.Address).Cascade.All();
}
public AddressMap()
{
Id(x=> Reveal.Member<Address>("StudentId"))
.GeneratedBy.Foreign("Student");
HasOne(x=> Reveal.Member<Address,Student>("Student"))
.Constrained()
.ForeignKey();
}
现在,当我试图运行它,它给错误为:
Could not determine type for: System.Linq.Expressions.Expression
1[[System.Func
2[[CastleTest.Domain.Address, CastleTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, for columns: NHibernate.Mapping.Column(Member)
为什么会发生此错误?
感谢很多答案。你能告诉我两者之间有什么区别吗?虽然它运作正常......理所当然需要知道为什么它给了错误。因为我是流利的nhibernate的新手 – Joy
'x => x.Student'是一个lambda表达式,它被FNH解析以获取属性名,但是如果属性不公开,你不能在lambda中访问它,显示'构造lambda。所以'x => Reveal.Member'将被解析以获得Propertyname'Member' – Firo