所以这就是我到目前为止所拥有的。我做错了还是3.0.0.3中有错误?
var Repository = new SimpleRepository("DBConnectionName");
using (TransactionScope ts = new TransactionScope())
{
using (SharedDbConnectionScope scs = new SharedDbConnectionScope("connstring", "providerName"))
{
try
{
for (int i = 0; i < 5; i++)
{
Supplier s = new Supplier();
s.SupplierCode = i.ToString();
s.SupplierName = i.ToString();
Repository.Add<Supplier>(s);
}
ts.Complete();
}
catch
{
}
}
}
我在SubSonic DbDataProvider中收到错误 public DbConnection CurrentSharedConnection { get {return __sharedConnection; }
protected set
{
if(value == null)
{
__sharedConnection.Dispose();
等。 __sharedConnection == null :(对象空引用异常:(
答案 0 :(得分:0)
也许切换SharedDbConnectionScope和TransactionScope可能会有所帮助。
using (SharedDbConnectionScope scs = new SharedDbConnectionScope("connstring", "providerName"))
{
using (TransactionScope ts = new TransactionScope())
{
}
}
答案 1 :(得分:0)
设置迁移时会发生这种情况 - 在tablemigration上将关闭dbconnection。
使用SimpleRepositoryOptions.None尝试SimpleRepository。
不知道这是不是一个错误。我认为事务不能与SimpleRepository一起使用,在事务中抛出异常时,我总是保存了一半的数据...也许它只适用于ActiveRecord?有人知道吗?
答案 2 :(得分:0)
终于为自己解决了这个问题。所有上述代码对我来说都不起作用(SubSonic 3.0.0.3,使用SQLite),但添加BeginTransaction()
使其按预期工作,大大加快了事务的速度,并在发生异常时回滚更新。
using (SharedDbConnectionScope sharedConnectionScope = new SharedDbConnectionScope(Access.Provider))
{
using (IDbTransaction ts = sharedConnectionScope.CurrentConnection.BeginTransaction())
{
IRepository repo = new SimpleRepository(Access.Provider);
//Do your database updates
//throw new ApplicationException("Uncomment this and see if the updates get rolled back");
ts.Commit();
}
}
为了完整性:Access.Provider
是一个帮助类的静态属性,返回return SubSonic.DataProviders.ProviderFactory.GetProvider(ConnectionString, "System.Data.SQLite");