代码之家  ›  专栏  ›  技术社区  ›  Tigraine

创建NHibernate对象并初始化Set

  •  3
  • Tigraine  · 技术社区  · 17 年前

    我有一张桌子叫 产品 我有桌子 存储历史记录 .

    现在,Product在其映射中包含对StorageHistory的引用

    <set name="StorageHistories" lazy="false">
      <key column="ProductId" />
      <one-to-many class="StorageHistory" />
    </set>
    

    当我从ORM检索对象时,它会得到一个空的ISet。

    首先让我头疼的是如何构造对象。 当我执行以下操作时:

    var product = new Product();
    session.Save(product);
    

    产品。StorageHistories属性为NULL,我得到一个NullReferenceException。 那么,我该如何将项目添加到该集合中,还是应该直接将StorageHistory项目本身添加到数据库中?

    2 回复  |  直到 17 年前
        1
  •  6
  •   Quibblesome    17 年前

    我总是在父对象的ctor中执行以下操作:

    histories=新的HashedSet();

    这涵盖了Save()用例。如您所述,NHibernate涵盖了Load()/Get()等用例。

        2
  •  0
  •   Min    17 年前

    为什么不呢?

    private ISet _StorageHistories;
    public virtual ISet StorageHistories {
         protected set { _StorageHistories = value;}
         get { if (_StorageHistories == null) _StorageHistories = new HashSet();
               return _StorageHistories;
         }
    }
    

    当然,如果你无论如何都要经历一个私有的麻烦,你最好把它放在构造函数中。