zoukankan      html  css  js  c++  java
  • NHibernate删除数据时遇到deleted object would be re-saved by cascade级联问题

      今天在处理数据时遇到了这个问题,数据是一对多的关系,A包含多个B,想将某个B从A中移除,在保存时抛出如标题的问题,查找了下资料得知:由于在配置文件中设置了cascade为all,A和B存在级联关系,那么在删除数据前,应当将A和B的关系先移除(详细方法可以在这里看),不然就会出现这个问题,于是在删除代码前加了如下代码

    A.ListB.Clear;

    在调试时在这里设置了一个断点并没有问题,成功执行了删除操作,但是将断点移除后还是会抛出上面的问题,仔细想了下后有点明白,问题出在这里:我的系统采用的是延迟加载方式,加了断点为了让你看到数据NHibernate会从数据库中拉取数据,没有断点的时候就不这样了,由于ListB我在构造方法里面已经初始化,所以并不为null,故而可成功调用Clear方法,但是这个时候NHibernate其实并没有从数据库中拉取数据,为了强制NHibernate从数据库中加载数据,我加了如下代码

    if(A.ListB.Count()>0)
        {
              A.ListB.Clear();      
        }

    通过调用集合方法的方式来强制NHibernate加载数据,测试后成功。当然,如果系统不是采用的延迟加载方式就不会出现上面的问题了。

  • 相关阅读:
    ZOJ 1002 Fire Net
    Uva 12889 One-Two-Three
    URAL 1881 Long problem statement
    URAL 1880 Psych Up's Eigenvalues
    URAL 1877 Bicycle Codes
    URAL 1876 Centipede's Morning
    URAL 1873. GOV Chronicles
    Uva 839 Not so Mobile
    Uva 679 Dropping Balls
    An ac a day,keep wa away
  • 原文地址:https://www.cnblogs.com/daner1257/p/6043706.html
Copyright © 2011-2022 走看看