3

我在 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。

这显然是因为 CurrentAddress 属性未在 Nhibernate 中映射,但我该如何解决呢?

4

1 回答 1

1

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

没有办法解决这个问题,虽然你可能有一些运气探索这样的解决方案:http: //fabiomaulo.blogspot.cz/2010/07/nhibernate-linq-provider-extension.html

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

于 2012-08-16T09:44:04.157 回答