我正在制作一个非常简单的 Lightswitch 项目,它将连接到我在 Oracle 11g 数据库中的一个表。我向项目添加了一个可编辑的网格并构建了项目。当我尝试在网格中添加或编辑数据时,出现以下错误:
在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。
内部异常消息:连接已经是本地或分布式事务的一部分
项目中没有自定义代码。我的看法是 Lightswitch 应该让数据上的表单变得非常容易。我四处寻找帮助,但到目前为止还没有。
我正在制作一个非常简单的 Lightswitch 项目,它将连接到我在 Oracle 11g 数据库中的一个表。我向项目添加了一个可编辑的网格并构建了项目。当我尝试在网格中添加或编辑数据时,出现以下错误:
在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。
内部异常消息:连接已经是本地或分布式事务的一部分
项目中没有自定义代码。我的看法是 Lightswitch 应该让数据上的表单变得非常容易。我四处寻找帮助,但到目前为止还没有。
//你需要清理,否则txn会失败..
partial void SaveChanges_Executed()
{
tx.Complete();
tx.Dispose();
}
如果您收到此错误,“内部异常消息:连接已经是本地或分布式事务的一部分”
您可以按照 BScholz 的第二篇文章https://forums.oracle.com/forums/thread.jspa?threadID=2263095来解决此问题
基本上,您需要为 Oracle 数据源实现 SaveChanges_Excuting 和 SaveChanges_Excuted。
复制并粘贴以下代码:
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();
}
尝试将此代码添加到您的数据源代码中。(右键单击 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
});
}
}
}