流畅的Nhibernate表与值对象映射

时间:2012-10-03 09:16:39

标签: .net oracle nhibernate fluent-nhibernate nhibernate-mapping

您能为以下方案建议有效的映射吗?两张桌子:

CREATE TABLE "ORDER"
  (
    "ID"      NUMBER(20,0) NOT NULL ENABLE,
    "STATUS_ID"  NVARCHAR2(10,0)
  );

CREATE TABLE "STATUS"
  (
    "ID"      NVARCHAR2(10,0) NOT NULL ENABLE,
    "DESCRIPTION"  NVARCHAR2(250,0)
  );

各自的课程是:

public class Order
{
    public virtual Id { get; set; }
    public virtual Status { get; set; }
}

public class Status
{
    public virtual Id { get; set; }
    public virtual Description { get; set; }
}

状态表是属性Proposal.Status的值对象的静态表,不应该被代码操纵。我希望Order始终加载状态描述和代码,即Eager Load Proposal.Status

我已经阅读了这个Ayende's blog post但是没有完全相同的情况,尽管我认为它很常见。

编辑:注意我正在尝试将此作为Component Map

1 个答案:

答案 0 :(得分:2)

您正在尝试将具有标识的常规实体映射为组件(值对象)。来自Ayende的帖子:

  

在DDD中,您有实体和值对象的概念。 后者   是不可变的,没有身份。在NHibernate中,它们被映射为   组件及其字段嵌入在同一个表中   包含实体

将值类型映射到与父实体相同的表时,应使用组件映射。您可以在documentation中找到有关NHibernate类型的更多信息。

尝试使用引用映射来执行此操作,但您可能会想到use HasOne