我想允许第 3 方代码在运行时扩展 NHibernate 映射。这就是我现在所拥有的:
数据:
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;
}
}
NHibernate 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>
第 3 方是我用 Ioc 加载的 dll。它知道接口IOrder
但不知道Order
类。它的开发人员还在我的数据库中添加了一个表:
TABLE OrderExtension
OrderId PK, FK from Orders
CustomField nvarchar
现在第 3 方开发者应该能够做到:
- 将他添加
CustomField
到查询中GetOrders
。我想过在运行时扩展 hbm 文件,但我不知道如何。 - 将条件添加到查询中以按 his 过滤
CustomField
。 - 监听
OrdersLoaded
事件并以某种方式获取他的数据。
这一切可能吗?
谢谢