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

nhibernate/orm-通过Web服务更新子级

  •  0
  • BuddyJoe  · 技术社区  · 15 年前

    用nhibernate更新子对象的正确方法是什么,但不必“唤醒”父对象。假设您希望避免这样做,因为父对象很大或启动成本很高。

    假设类称为author(父)和book(子)。(仍然,试图避免实例化作者)

    书以XML形式通过Web服务返回。它被反序列化回一个clr对象。 Book有一个authorid属性,允许发生这种情况。但它也有作者属性。

    问题是,当您尝试保存或更新()book时,数据库中的author_id将被清除,因为对象反序列化时author为空。这似乎是一个常见的问题。解决方法是什么?

    也, 如果您实例化了作者,并且它具有Books属性。您尝试更新的图书已经是这些图书之一(list<book>)。我们也遇到了 “具有相同标识符值的其他对象已与会话”问题关联。通过Web服务更新子级的标准过程是什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Diego Mijelshon    15 年前

    首先,你的坚持 Book 实体应该 只有 有一个 Author 参考,不是 AuthorId . 你应该使用 数码相机 为您的服务,包含 委托人 而不是 作者 .

    之后,代码很简单:

    using (var tx = session.BeginTransaction())
    {
      var book = session.Get<Book>(bookDTO.Id);
      MapAllSimplePropertiesFromDTO(bookDTO, book);
      book.Author = session.Load<Author>(bookDTO.AuthorId);
      tx.Commit();
    }
    

    session.Load<Author> 创建对 作者 通过ID而不转到数据库。