我的域实体每个都有一组“固定”属性和一组可以在运行时添加的“动态”属性。我通过使用NHibernate的动态组件功能来处理这个问题。
public class Product {
public virtual Guid Id { get; }
public virtual string Name { get; set;}
public virtual IDictionary DynamicComponents { get; }
}
现在我有以下情况
public class Customer {
public virtual Guid Id { get; }
public virtual string Type { get; set;}
public virtual IDictionary DynamicProperties { get; }
}
如果CustomerType类似于“在线”或“InPerson”。此外,在线客户具有动态属性“名称”和“IPAddress”,而InPerson客户具有动态属性“名称”和“推销员“即可。
哪些客户类型可用,并且它们的额外属性在元数据中配置,元数据用于在应用程序启动时生成hbm文件。
我可以找到一些方法来使用中间DTO层将它们组合在一起,但是在这种情况下NHibernate是否有任何支持?唯一的困难似乎是客户的所有不同“类型”都映射到同一个Customer类。
答案 0 :(得分:0)
也许是一个愚蠢的问题,但为什么不只使用Customer的两个子类?
除此之外,我不清楚你想要NHibernate支持什么。你能澄清一下“NHibernate在这种情况下的任何支持”是什么意思,你想让NHibernate为你做什么?
答案 1 :(得分:0)
我认为你可以在子类中找到使用动态属性的解决方案,参考动态属性,例如IPAddress { get { return DynamicProperties["ipAddress"] as IPAddress; } }
对我而言,有趣的部分是如何以可扩展的方式映射这些属性......
你有没有想出一个不同的解决方案?