我正在创建一个非常简单的Lightswitch项目,该项目将连接到Oracle 11g数据库中的表。我为项目添加了一个可编辑的网格并构建了项目。当我尝试在网格中添加或编辑数据时,出现以下错误:
在提供程序连接上启动事务时发生错误。有关详细信息,请参阅内部异常。
内部异常消息: 连接已经是本地或分布式事务的一部分
项目中没有自定义代码。我的看法是,Lightswitch应该非常容易地为数据创建表单。到目前为止,我一直在四处寻求帮助。
答案 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。
复制并粘贴以下代码:
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
});
}
}
}