0

サードパーティのコードが実行時に NHibernate マッピングを拡張できるようにしたいと考えています。これは私が今持っているものです:

SQL:

TABLE Orders
    Id INT identity,
    [more fields...]

私のプロジェクトのコード:

public interface IOrder
{
    int Id { get; set; }
    // more properties...
}

internal class Order : IOrder
{
    public int Id { get; set; }
}

public class OrderDAL
{
    public IEnumerable<IOrder> GetOrders()
    {
        ICriteria criteria;
        // build some criteria
        var result = criteria.List<Order>();
        RaiseOrdersLoaded(result);
        return result;
    }
}

Hibernate hbm ファイル:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="..." assembly="...">
  <class name="Order" table="Orders">
    <id name="Id" column="Id" type="int" >
      <generator class="identity" />
    </id>
    [more properties...]
  </class>
</hibernate-mapping>

サードパーティは、Ioc でロードする dll です。インターフェイスは知っていますが、クラスは知りIOrderません。Orderその開発者は、私のデータベースにもテーブルを追加しています:

TABLE OrderExtension
    OrderId PK, FK from Orders
    CustomField nvarchar

これで、サードパーティの開発者は次のことができるようになります:

  1. CustomFieldのクエリに彼を追加しますGetOrders。実行時に hbm ファイルを拡張することを考えましたが、方法がわかりません。
  2. 条件をクエリに追加して、彼の でフィルタリングしますCustomField
  3. イベントをリッスンしOrdersLoaded、何らかの方法で彼のデータを取得します。

これはすべて可能ですか?

ありがとう

4

1 に答える 1

1

名前付きクエリをマッピングに入れることができますが、これらは SQL になります: http://nhibernate.info/doc/nh/en/index.html#querysql-namedqueries

他のタイプのクエリに挿入されるマッピングでフィルターを定義することもできます: http://nhibernate.info/doc/nh/en/index.html#filters

Criteria、Queryover、HQL、および LINQ クエリに関しては、プラグインが呼び出すことができるいくつかの初期化メソッドを介して構成できるようにするために、 Orders クラスで好きな構成を作成できます。

于 2013-01-02T10:54:09.533 に答える