一个简单的添加数据,调试到trans.Commit()后报错:IsolationLevel
<错误: 发生 {System.InvalidOperationException} 类型的异常>
System.Data.IsolationLevel程序能过,但数据库里并没有添加数据.我试过了各种hibernate.connection.isolation的设置
如:ReadCommitted,RepeatableRead, Serializable, Unspecified 
用的是oracle数据库.设置事务隔离级别是不是要在oracle里也要相应的设置.
好郁闷啊?映射配置文件应该没错,我都是用的最简单的形式,往达人解惑啊,感激不尽!代码如下: public void AddPost()
{ NHibernate.Cfg.Configuration cfg = new Configuration(); cfg.AddAssembly("abc");
ISessionFactory factory = cfg.BuildSessionFactory(); ISession session=factory.OpenSession();
ITransaction trans=null; trans = session.BeginTransaction();  Post post = new Post();
post.PostID = "111";
post.Title = "helloNibernate";
post.Content = "handsomeboy";
post.Creator = "dwp";

                           trans.Commit();  session.Close();  }

解决方案 »

  1.   

    trans = session.BeginTransaction(); 
    Post post = new Post();
    post.PostID = "111";
    post.Title = "helloNibernate";
    post.Content = "handsomeboy";
    post.Creator = "dwp";
    trans.Commit(); 
    是不是因为事务中没有数据库操作,在post.Creator = "dwp";与trans.Commit(); 之间加上session.Save( post ); 试试??纯属瞎猜。
      

  2.   

    首先要确定你的数据类型是否正确.
    另外,在提交事务即trans.Commit(); 之前加入Save方法:session.Save(post);
      

  3.   

    你事务里面什么都没做啊
    最少要save一下吧
      

  4.   

    先谢谢各位了,加了SAVE后,Rollback了,应该是类型不匹配吧?
    MS SQL Server里用uniqueidentifier与Guid匹配,
    而ORACLE里没有支持Guid吧?
    那NHibernate的ID一定要用Guid吗?
    怎么使类型匹配啊?
      

  5.   

    如果用ID用Guid类型,
    配置文件:
            <id name="PostID" column="POSTID"> 
                <generator class="native" /> 
            </id>
    根据底层数据库的能力选择 identity, sequence 或者 hilo中的一个 然后去掉代码中的:
    post.PostID = "111";由内置生成器生成ID;那ORACLE数据表中POSTID应该用什么类型才行呢?晕了...
      

  6.   

    Save时报错为:未处理的“NHibernate.MappingException”类型的异常出现在 nhibernate.dll 中。其他信息: Unknown entity class: abc.Post
      

  7.   

    Configuration  cf = new Configuration();
    cf.AddAssembly("NDataOp");
    ISessionFactory factory = cf.BuildSessionFactory();
    ISession session = factory.OpenSession();
    ITransaction transaction = session.BeginTransaction();
    try
    {
    //NHibernate_Demo newUser = new NHibernate_Demo();
    N_Users_Demo newUser = new N_Users_Demo();
    newUser.Id = "500";        
    newUser.UserName = "J";        
    newUser.Password = "rer";        
    newUser.EmailAddress = "mbh";        
    newUser.LastLogon = DateTime.Now;                               
        
    session.Save(newUser);
           
    transaction.Commit();        
    session.Close();
    transaction.Dispose();
    Response.Write("Let's Go!!!!");
    }
    catch(Exception ex)
    {
    Response.Write(ex.ToString());
    }