2

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

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

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

项目中没有自定义代码。我的看法是 Lightswitch 应该让数据上的表单变得非常容易。我四处寻找帮助,但到目前为止还没有。

4

3 回答 3

1

//你需要清理,否则txn会失败..

 partial void SaveChanges_Executed()
{
    tx.Complete();
    tx.Dispose();
}
于 2011-10-05T20:22:54.747 回答
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();
    }
    
于 2012-01-14T07:51:27.280 回答
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
                  });
        } 
    }
}
于 2011-09-06T19:21:29.423 回答