使用NHibernate更新查询

时间:2012-09-05 13:41:06

标签: c# asp.net-mvc nhibernate

我在使用NHibernate

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

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

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

    newCust.Location = GetlocationfromDB(ViewModel.LocationId);
    
  2. 它如何与m:n关系起作用。我有订单和订单实体。因此,如果添加/删除了一个新组,我是否需要检查添加哪个组并从db获取并附加它,或者只是groupid才能正常运行..

1 个答案:

答案 0 :(得分: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来获取该组,如果它是一个已经存在的组。