C# 获取多对多关系的第一个元素

C# 获取多对多关系的第一个元素,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我在映射nhibernate中的一个属性时遇到一些问题。我有一个映射到集合的多对多关系。但是,我还想将属性映射到多对多集合的第一个元素。这是我的密码: 我正在映射的类: public class Project { public Project() { this.Addresses = new List<Address>(); } public virtual int ID { get; set; } public virtual I

我在映射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; }
}
但是,当我试图查询项目类currentaddress时,我得到一个QueryException:无法解析属性:currentaddress


这显然是因为CurrentAddress属性没有映射到Nhibernate中,但是如何解决这个问题?

正如您正确指出的,您不能查询未映射的属性,因为Nhibernate无法生成适当的SQL-属性的getter可以任意复杂

没有办法解决这个问题,尽管您可能有幸探索了以下解决方案:


但是,我建议查询内存中未映射的属性。

并且没有办法将其映射到多对多映射的第一个元素?我想不出一个简单的方法来实现这一点。为什么不直接在查询中使用地址.First()?
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();
    }
        public virtual Address CurrentAddress {
        get {
            if (!Addresses.Any()) {
                Address newAddress = new Address();
                this.Addresses.Add(newAddress);
                return newAddress;
            }
            else {
                return this.Addresses.First();
            }
        }
    }