我在nhibernate中映射我的一个属性时遇到了一些问题。我有一个多对多关系,映射到一个集合。但是,我还想将属性映射到多对多集合的第一个元素。这是我的代码: 我正在绘制的类:
public class Project {
public Project() {
this.Addresses = new List<Address>();
}
public virtual int ID { get; set; }
public virtual IList<Address> Addresses { get; set; }
public virtual Address CurrentAddress { get; set; }
}
类图:
public class ProjectMap : ClassMap<Project> {
public ProjectMap() {
Table("Project");
Id(x => x.ID).GeneratedBy.Identity();
HasManyToMany(x => x.Addresses)
.Table("ProjectAddress")
.ParentKeyColumn("ProjectID")
.ChildKeyColumn("AddressID").Cascade.All();
}
但我需要CurrentAddress指向Addresses属性的第一个元素。所以我尝试用一个getter来解决这个问题,它返回第一个元素:
public virtual Address CurrentAddress {
get {
if (!Addresses.Any()) {
Address newAddress = new Address();
this.Addresses.Add(newAddress);
return newAddress;
}
else {
return this.Addresses.First();
}
}
}
但是,当我尝试查询Project类currentaddress时,我得到一个QueryException:无法解析属性:CurrentAddress。
这显然是因为在Nhibernate中没有映射CurrentAddress属性,但是我该如何解决这个问题?
答案 0 :(得分:1)
正如您正确指出的那样,您无法查询非映射属性,因为NHibernate无法生成适当的SQL - 属性的getter可能是任意复杂的。
没有办法解决这个问题,虽然你可能会有幸找到这样的解决方案:http://fabiomaulo.blogspot.cz/2010/07/nhibernate-linq-provider-extension.html
但是,我建议在内存中查询非映射属性。