diff --git a/Core/DataStore.cs b/Core/DataStore.cs index 795f011..9a012c5 100644 --- a/Core/DataStore.cs +++ b/Core/DataStore.cs @@ -700,7 +700,7 @@ protected object GetInstanceValue(FieldAttribute field, object instance) } public virtual void BeginTransaction() - { + { BeginTransaction(IsolationLevel.Unspecified); } diff --git a/SQL Server/SqlServerDataStore.cs b/SQL Server/SqlServerDataStore.cs index 2b0b5f6..0d950a1 100644 --- a/SQL Server/SqlServerDataStore.cs +++ b/SQL Server/SqlServerDataStore.cs @@ -20,6 +20,8 @@ public partial class SqlServerDataStore : SQLStoreBase, IDisposab public const int DefaultServerPort = 1433; public const ConnectionBehavior DefaultConnectionBehavior = ConnectionBehavior.AlwaysNew; + private IDbConnection m_transactionConnection = null; + private IDbTransaction m_transaction = null; public SqlServerDataStore(SqlConnectionInfo info) : base() @@ -434,6 +436,41 @@ public override void OnInsert(object item, bool insertReferences) } } + public override void BeginTransaction() + { + if (m_transactionConnection != null) + { + throw new Exception("Transaction already in progress"); + } + + m_transactionConnection = GetConnection(false); + m_transaction = m_transactionConnection.BeginTransaction(IsolationLevel.ReadCommitted); + } + + public override void Commit() + { + if (m_transaction == null) + { + throw new Exception("No active transaction"); + } + m_transaction.Commit(); + m_transaction = null; + DoneWithConnection(m_transactionConnection, false); + m_transactionConnection = null; + } + + public override void Rollback() + { + if (m_transaction == null) + { + throw new Exception("No active transaction"); + } + m_transaction.Rollback(); + m_transaction = null; + DoneWithConnection(m_transactionConnection, false); + m_transactionConnection = null; + } + private int GetIdentity(IDbConnection connection) { using (var command = new SqlCommand("SELECT @@IDENTITY", connection as SqlConnection)) diff --git a/Shared/OpenNETCF.ORM.Version.cs b/Shared/OpenNETCF.ORM.Version.cs index 7f35ba4..fd6cfed 100644 --- a/Shared/OpenNETCF.ORM.Version.cs +++ b/Shared/OpenNETCF.ORM.Version.cs @@ -9,5 +9,5 @@ [assembly: AssemblyProduct("OpenNETCF.ORM")] [assembly: AssemblyCopyright("Copyright © Chris Tacke 2010-2017")] -[assembly: AssemblyVersion("1.0.18058.0")] -[assembly: AssemblyFileVersion("1.0.18058.0")] +[assembly: AssemblyVersion("1.0.18065.0")] +[assembly: AssemblyFileVersion("1.0.18065.0")] diff --git a/Tests/OpenNETCF.ORM.SqlServer.Integration.Test/SqlServerDataStoreTests.cs b/Tests/OpenNETCF.ORM.SqlServer.Integration.Test/SqlServerDataStoreTests.cs index f17186d..2dec9ff 100644 --- a/Tests/OpenNETCF.ORM.SqlServer.Integration.Test/SqlServerDataStoreTests.cs +++ b/Tests/OpenNETCF.ORM.SqlServer.Integration.Test/SqlServerDataStoreTests.cs @@ -59,6 +59,54 @@ public void BaseClassTest() } + [TestMethod] + public void TransactionTest() + { + var connection = new SqlConnectionInfo(); + connection.DatabaseName = "TEST"; + connection.ServerName = "test.opennetcf.com"; + connection.ServerPort = 1433; + connection.UserName = "TEST"; + connection.Password = "TEST!"; + + var store = new SqlServerDataStore(connection); + + try + { + store.AddType(); + store.AddType(); + + var b = new PublishedTenantBuildingState() + { + PublishID = Guid.NewGuid(), + RecordDateUtc = DateTime.Now.ToUniversalTime() + }; + var a1 = new PublishedTenantApartmentState() + { + PublishID = Guid.NewGuid(), + PublishedBuildingStateID = b.PublishID, + SpaceTemperature = 1 + }; + var a2 = new PublishedTenantApartmentState() + { + PublishID = Guid.NewGuid(), + PublishedBuildingStateID = b.PublishID, + SpaceTemperature = 2 + }; + + + store.BeginTransaction(); + store.Insert(b); + store.Insert(a1); + store.Insert(a2); + store.Commit(); + } + catch (Exception ex) + { + } + + } + [TestMethod] public void GuidPKTest() { diff --git a/nuspec/opennetcf-orm-sqlserver.nuspec b/nuspec/opennetcf-orm-sqlserver.nuspec index 4f99ccd..c7b5fb5 100644 --- a/nuspec/opennetcf-orm-sqlserver.nuspec +++ b/nuspec/opennetcf-orm-sqlserver.nuspec @@ -2,7 +2,7 @@ opennetcf-orm-sqlserver - 1.0.18058.0 + 1.0.18065.0 OpenNETCF ORM for Microsoft SQL Server Chris Tacke false