Microsoft Lightswitch使用Oracle数据库的事务错误

时间:2011-08-01 23:33:29

标签: oracle11g visual-studio-lightswitch

我正在创建一个非常简单的Lightswitch项目,该项目将连接到Oracle 11g数据库中的表。我为项目添加了一个可编辑的网格并构建了项目。当我尝试在网格中添加或编辑数据时,出现以下错误:

  

在提供程序连接上启动事务时发生错误。有关详细信息,请参阅内部异常。

     

内部异常消息:   连接已经是本地或分布式事务的一部分

项目中没有自定义代码。我的看法是,Lightswitch应该非常容易地为数据创建表单。到目前为止,我一直在四处寻求帮助。

3 个答案:

答案 0 :(得分:1)

//你需要清理或者txn会失败..

 partial void SaveChanges_Executed()
{
    tx.Complete();
    tx.Dispose();
}

答案 1 :(得分:1)

如果您收到此错误,“内部异常消息:连接已经是本地或分布式事务的一部分”

您可以按照BScholz的第二篇文章https://forums.oracle.com/forums/thread.jspa?threadID=2263095

解决问题

基本上,您需要为Oracle数据源实现SaveChanges_Excuting和SaveChanges_Excuted。

  1. 切换到“文件视图”(LightSwitch默认显示“逻辑视图”)。
  2. 在“服务器项目”中添加对“System.Transactions”的引用。
  3. 切换回“逻辑视图”
  4. 右键单击数据源名称,然后单击“查看代码”以编辑部分类。
  5. 复制并粘贴以下代码:

    private TransactionScope _tscope;
    
    partial void SaveChanges_Executing()
    {
        _tscope = new TransactionScope(TransactionScopeOption.Required,
        new TransactionOptions
        {
            IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
        });
    }
    
    partial void SaveChanges_Executed()
    {
        _tscope.Complete();
        _tscope.Dispose();
    }
    

答案 2 :(得分:0)

尝试将此代码添加到数据源代码中。 (右键单击Oracle数据源并选择“查看代码”)

确保记得更改类名以匹配您的数据源。

using System.Transactions;

namespace LightSwitchApplication
{
    public partial class <ChangeThisToYourClassName>
    {
        private TransactionScope tx;

        partial void SaveChanges_Executed()
        {
            tx.Complete();
        }

        partial void SaveChanges_Executing()
        {
            tx = new TransactionScope(TransactionScopeOption.Required, 
                  new TransactionOptions { 
                      IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
                  });
        } 
    }
}