サードパーティのコードが実行時に 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
これで、サードパーティの開発者は次のことができるようになります:
CustomField
のクエリに彼を追加しますGetOrders
。実行時に hbm ファイルを拡張することを考えましたが、方法がわかりません。- 条件をクエリに追加して、彼の でフィルタリングします
CustomField
。 - イベントをリッスンし
OrdersLoaded
、何らかの方法で彼のデータを取得します。
これはすべて可能ですか?
ありがとう