3

nhibernateでプロパティの1つをマッピングする際に問題が発生しました。コレクションにマッピングされた多対多の関係があります。ただし、プロパティを多対多コレクションの最初の要素にマップすることも必要です。これが私のコードです:私がマッピングしているクラス:

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();
    }

ただし、Addressesプロパティの最初の要素を指すようにCurrentAddressが必要です。そこで、次のような最初の要素を返すゲッターを使用してこれを解決しようとしました。

        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:could not resolve property:CurrentAddressが発生します。

これは明らかにCurrentAddressプロパティがNhibernateにマップされていないためですが、どうすればこれを修正できますか?

4

1 に答える 1

1

正しく指摘したように、NHibernateには適切なSQLを生成する方法がないため、マップされていないプロパティをクエリすることはできません。プロパティのゲッターは任意に複雑になる可能性があります。

これを修正する方法はありませんが、次のような解決策を探すことができるかもしれません:http: //fabiomaulo.blogspot.cz/2010/07/nhibernate-linq-provider-extension.html

ただし、メモリ内のマップされていないプロパティをクエリすることをお勧めします。

于 2012-08-16T09:44:04.157 に答える