3

Fluent NHibernate を使用して、読み取り専用プロパティを Sql Server の計算列にマップしたいと考えています。プロパティは、別のプロパティの部分文字列です。これを行うのは、部分文字列をインデックス可能にして、検索パフォーマンスを向上させるためです。しかし、マッピングでフォーミュラ関数を使用すると、プロパティはデータベースの計算列にマップされませんが、クエリを使用すると計算されます。

Class Person{
   public virtual string name {get; set;}
   public virtual string subName {get; set;}
}

Class PersonMap : ClassMap<Person>{
   Map(p => p.name);
   Map(p => p.subName).Generated.Always().Formula("substring(name, 0, 5)");
}
4

1 に答える 1

2

コード内の機能を複製する必要があります。nameプロパティを変更した場合、NHibernateはデフォルトでは、生成されたプロパティを評価するための新しいクエリをデータベースに送信しません。

次のようなことをする必要があります。

 public virtual string subName { get { return name.Substring(0, 5); } set { } }

空のセッターが必要になることに注意してください。そうしないと、NHibernateが文句を言います

編集:データベース内の列にインデックスを付けたいので、データベース内のそのテーブルの計算列を作成する必要があります。これ自体はNHibernateとは関係がなく、マッピングで列を完全に無視するか(コードで複製する限り)、.Formula(..)部分を削除することができます(計算列で指定されているため)。すでに)

于 2013-02-13T12:43:15.497 に答える