【问题标题】:NHibernate: Mapping different dynamic components based on a discriminatorNHibernate:基于鉴别器映射不同的动态组件
【发布时间】:2010-04-15 20:19:52
【问题描述】:

我的域实体每个都有一组“固定”属性和一组可以在运行时添加的“动态”属性。我使用 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 类似于 "Online""InPerson"。此外,在线客户具有动态属性 "Name""IPAddress",而 InPerson 客户具有动态属性 "Name""推销员”

哪些客户类型可用,它们的额外属性在元数据中配置,用于在应用程序启动时生成 hbm 文件。

我可以想办法使用中间 DTO 层将其组合在一起,但是 NHibernate 是否支持这种情况?唯一的困难似乎是所有不同“类型”的客户都映射到同一个客户类。

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    也许是个愚蠢的问题,但你为什么不只使用 Customer 的两个子类?

    除此之外,我并不清楚您希望 NHibernate 支持什么。您能否澄清一下“NHibernate 对此方案的任何支持”是什么意思,您希望 NHibernate 为您做什么?

    【讨论】:

    • 它们不能是子类,因为它们是准动态的。在运行时,我需要创建一种新的 Person 类型,包括重建映射。就像 NHibernate 允许您使用鉴别器将两个子类映射到 3 个表一样,我希望仅在鉴别器以某种方式时才使用某种映射。我知道这很尴尬,但鉴于对我们的一些非常具体的限制,这是必要的,不幸的是,NH 是迄今为止最好的 ORM 准动态或其他方式
    【解决方案2】:

    我认为您可以使用动态属性找到解决方案...在您的子类中,请参阅动态属性,例如IPAddress { get { return DynamicProperties["ipAddress"] as IPAddress; } }

    对我来说有趣的部分是如何以可扩展的方式映射这些属性...

    你有没有想出不同的解决方案?

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多