【发布时间】:2009-07-14 13:04:52
【问题描述】:
更新后:我已经通过命令“ExecuteNonQuery”找到了问题所在。那是在更新期间失败或在插入期间挂起的那个。尝试使用普通 ADO.NET 的简单示例,他们的事务完美运行。另外......它在我的本地家庭计算机连接上运行良好,Oracle Express 版本。在某种服务器配置中再次指向它? 在调试时进入 NHibernate 代码会很好,但到目前为止我仍然无法设置它,即使我已经重建了源代码并使用了那些 dll 和 pdb 文件。以前有人能做到吗?
我已经为此苦苦思索了一段时间。几天来,我一直在使用 NHibernate 和 Oracle 10g 数据库进行开发,到目前为止,我只使用了在映射方面都很好用的 select 语句。
我现在开始实现我的第一个插入(保存)和更新语句,但是测试都失败了。 它们都在 transaction.commit() 部分失败。
当执行 INSERT(保存)时,代码到达 transaction.commit(),但随后“卡住”了。测试继续运行,没有前进。 这是测试的输出(注意测试一直在运行)
NHibernate: select hibernate_sequence.nextval from dual
NHibernate: INSERT INTO MOB_PL_MAPPING_TEST (DES, TEST_ID) VALUES (:p0, :p1);:p0 = 'This is a test!', :p1 = 161
执行 UPDATE 时,transaction.commit() 失败,我收到以下错误堆栈:
NHibernate: SELECT test0_.TEST_ID as TEST1_10_0_, test0_.DES as DES10_0_ FROM MOB_PL_MAPPING_TEST test0_ WHERE test0_.TEST_ID=:p0;:p0 = 61
NHibernate: UPDATE MOB_PL_MAPPING_TEST SET DES = :p0 WHERE TEST_ID = :p1;:p0 = 'Changed!', :p1 = 61
TestCase 'Data.Tests.Test_Update_on_Test_Table'
failed: NHibernate.TransactionException : Rollback failed with SQL Exception
----> System.InvalidOperationException : This OracleTransaction has completed; it is no longer usable.
c:\CSharp\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs(260,0): at NHibernate.Transaction.AdoTransaction.Rollback()
E:\SubVersion\Application\Src\Data\UnitOfWork\Data.UnitOfWork\GenericTransaction.cs(26,0): at Data.UOW.GenericTransaction.Rollback()
E:\SubVersion\Application\Src\Data\UnitOfWork\Data.UnitOfWork\UnitOfWorkImplementor.cs(49,0): at Data.UOW.UnitOfWorkImplementor.TransactionFlush(IsolationLevel isolationLevel)
E:\SubVersion\Application\Src\Data\UnitOfWork\Data.UnitOfWork\UnitOfWorkImplementor.cs(36,0): at Data.UOW.UnitOfWorkImplementor.TransactionFlush()
E:\SubVersion\Application\Src\Data\Data.Tests\Repositories\LoyaltyRepositoryTests.cs(159,0): at Data.Tests.Test_Update_on_Test_Table()
--InvalidOperationException
at System.Data.OracleClient.OracleTransaction.AssertNotCompleted()
at System.Data.OracleClient.OracleTransaction.Rollback()
c:\CSharp\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs(246,0): at NHibernate.Transaction.AdoTransaction.Rollback()
我必须说我对 oracle 不了解,但似乎建立事务会导致问题。尽管选择语句 (GET) 的相同代码(使用事务)工作正常。 这可能是一个 oracle 配置问题(阻止插入/更新事务)还是我必须在应用程序级别配置其他东西?
任何人都可以在这里帮助我或进一步了解可能发生的问题吗?
提前致谢。
【问题讨论】:
标签: oracle nhibernate transactions insert