FluentNhibernate映射和结构

时间:2014-08-10 13:32:45

标签: c# asp.net-mvc nhibernate fluent-nhibernate fluent-nhibernate-mapping

我认为这是一个简单的问题,在谷歌中只有几分钟,我得到了解决方案等。但实际上,我没有发现什么特别的。

所以我得到了一个struct(或类什么)和一个类,其中每个字段都有这样的结构类型。我想使用模型在我的数据库中创建/使用表,其中每个字段都有类型为struct的类型。

例如struct就在这里

public class myStruct
{
    public float value;
    public string description;
}

这里是我想要使用的模型

public class FieldSummaryRow
{
    public int Id{ get; set } 
    public myStruct A { get; set; }
    public myStruct B { get; set; }
    public myStruct C { get; set; }
    public class FieldSummaryMap: ClassMap<FieldSummaryRow>
    {
      public FieldSummaryMap()
      {
        Id(x => x.Id);
        Map (x=>x.A);
        Map (x=>x.B);
        Map (x=>x.C);
      }
    }
}

但是我认为它不会像那样工作,因为myStruct未正确映射。 那我该怎么解决这个问题呢? 或者我之前以同样的方式使用地图myStruct

1 个答案:

答案 0 :(得分:2)

从NHibernate的角度来看,我们应该将您的结构视为<component>。这意味着 myStruct A必须有 valueA descriptionA 列,B和{ {1}}。

参见文档:

这样的C myStruct 最终会像这个xml片段一样映射:

<component>

正如我们在这里看到的那样(Adam Bar的文章 - 将下半部分视为Fluent映射的一个很好的总结)

我们需要这个:

<class name="FieldSummaryRow" table="...>
    ....

    <component class="myStruct" name="A">
      <property name="value"       column="valueA"       access="field" />
      <property name="description" column="descriptionA" access="field" />
    </component>

    <component class="myStruct" name="B">
    ...

</class>