映射nhibernate中的值对象列表

时间:2015-01-11 06:57:08

标签: c# .net nhibernate nhibernate-mapping mapping-by-code

我有模型房子有门列表(门代表价值对象)

public class House : Entity<Guid>
{
   public int Id { get; set; }
   public List<Door> Doors { get; set; }
   ...
   public House(){
      Doors = new List<Door>();
   }
}

我通过代码方法使用nhibernate映射,所以我尝试映射House

HouseMap.cs

public class HouseMap: ClassMapping<House>
{
   public HouseMap()
   {
      ...
      Component(c => c.Doors, DoorMap.Mapping());
   }
}

DoorMap.cs

public class DoorMap
{
    public static Action<IComponentMapper<Door>> Mapping()
    {
        return c =>
        {
            c.Property(p => p.Number);
            c.Property(p => p.Color);             
        };
    }
}

我在HouseMap.cs上收到错误

  

组件(c =&gt; c.Doors,DoorMap.Mapping());

     

无法将LAMBDA表达式转换为类型&#39; STRING&#39;要点它不是代表类型

我在这里做错了什么?非列表值对象的其他映射很好。

1 个答案:

答案 0 :(得分:0)

您应该确定使用C#实体的接口:

public class House : Entity<Guid>
{
    ...
    //public List<Door> Doors { get; set; }
    public virtual IList<Door> Doors { get; set; }

此处描述了参考集的映射:

Adam Bar的

Mapping-by-Code - Set and Bag

基于此,Doors集合映射应如下所示(我更喜欢.Bag()IList,而不是.Set()更具体{{ {1}})

ISet

这些是其他可用的设置(摘自上面的链接)

Bag(x => x.Doors, c =>
{
   ...