如何将项目添加到NHibernate中的双向一对多关系中?

如何将项目添加到NHibernate中的双向一对多关系中?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,假设我有下面的类框和项。其中一个框包含多个项目,而一个项目只能位于一个框中。物品也知道它在哪个盒子里 public class Box { public virtual int BoxID {get; set:} public virtual string Name {get; set;} public virtual IList<Item> Items {get; set;} } public class Item { public virtual i

假设我有下面的类框和项。其中一个框包含多个项目,而一个项目只能位于一个框中。物品也知道它在哪个盒子里

public class Box
{ 
   public virtual int BoxID {get; set:}
   public virtual string Name {get; set;}
   public virtual IList<Item> Items {get; set;}
}

public class Item
{
    public virtual int ItemID {get; set;}
    public virtual string Name {get; set;}
    public virtual Box ContainerBox {get; set;}
 }
我是NHibernate的新手,但我很确定这是个坏主意。因为,当稍后从数据库中持久化一个框时,
Box.Items
不会指向
\u Items
,而是会被覆盖以指向其他特定于NHibernate的代理集合。因此,我认为,在持久化的框上调用
Box.AddItem()
,实际上不会向框中添加新项


正确的方法是什么?我希望有一种方法可以将项目添加到更新Box.Items和Item.ContainerBox的框中,而不管该框是新的还是从数据库中持久化的。

\u Items
更改为protected,并将流畅的映射设置为
\u Items
属性,这样就可以正常工作。我已经在很多方面使用了这种技术。

Fluent映射看起来像什么?我没有看到如何将受保护的成员放入lambda表达式中。以下是我所做的似乎有效的操作:HasMany(b=>b.Items)。Access.CamelCaseField(Prefix.下划线)也可以看到此页面和此页面
public class BoxMap:ClassMap<Box>
{
    Id(b=>b.BoxId);
    Map(b=>b.Name);
    HasMany(b => b.Items)
        .Inverse()
        .CascadeAll();
}

public class ItemMap:ClassMap<Item>
{
    Id(i=>i.ItemId);
    Map(i=>i.Name);
    References(i => i.ContainerBox );
}
public class Box
{ 
   private List<Item> _Items = new List<Item>();
   public virtual int BoxID {get; set:}
   public virtual string Name {get; set;}
   public virtual IEnumerable<Item> Items 
   {
       get{return _Items;}
       private set 
           {
               _Items.Clear();
               _Items.AddRange(value);
           }
   }

   public void AddItem(Item i)
   {
       if(i.ContainerBox != null) throw new Exception("Item is already in a box!");
       i.ContainerBox = this;
       _Items.Add(i);
   }
}