• 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加载数据,测试后成功。当然,如果系统不是采用的延迟加载方式就不会出现上面的问题了。

  • 相关阅读:
    理解Mysql prepare预处理语句
    php观察折模式
    RSA加密解密
    64位CentOS 6.4下安装wine(32位)
    wireshark安装
    linux安装Vmware的时候出现“Could not open /dev/vmmon”
    php中的魔术方法
    lnmp安装--php安装
    XZ压缩最新压缩率之王
    package.json文件
  • 原文地址:https://www.cnblogs.com/daner1257/p/6043706.html
Copyright © 2020-2023  润新知