0

我有几个关于使用 NHibernate 更新功能的问题

  1. 我有具有 1:n 关系的客户和位置实体。客户拥有位置属性。在创建/更新客户实体时,我只是分配了位置属性并提交了更改。

    new Location() { Id = ViewModel.LocationId };
    

    这是正确的方法还是我需要从数据库中检索位置实体并再次附加它,如下所示

    newCust.Location = GetlocationfromDB(ViewModel.LocationId);
    
  2. 以及它如何与 m:n 关系一起工作。我有 order 和 orderitems 实体。因此,如果添加/删除了一个新组,我是否需要检查添加了哪个组并从 db 获取并附加它,或者只是 groupid 就可以了。

4

1 回答 1

1
  1. 这不是正确的方法 - 如果您对主键具有未保存的值映射权限,它可能会起作用,但正确的方法是使用 session.Load(ViewModel.LocationId) 参见http:// /ayende.com/blog/3988/nhibernate-the-difference-between-get-load-and-querying-by-id

  2. 有很多方法可以解决这个问题,但听起来您希望将您的关系映射为一个集合(以防止重复)而不是一个包。如果您将其映射为一个集合并将 ISet 用于关系的属性类型,则会为您处理重复项。但是,如果您使用包,则需要在自己的代码中删除重复项。同样,如果它是一个已经存在的组,您应该使用 session.Load 来获取该组。

于 2012-09-05T14:57:24.653 回答