|
|
|
|
@ -0,0 +1,80 @@
|
|
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
|
|
|
|
|
|
namespace EntityFrameworkCore.Jet.Data.Tests
|
|
|
|
|
{
|
|
|
|
|
[TestClass]
|
|
|
|
|
public class TransactionTest
|
|
|
|
|
{
|
|
|
|
|
private const string StoreName = nameof(TransactionTest) + ".accdb";
|
|
|
|
|
|
|
|
|
|
private JetConnection _connection;
|
|
|
|
|
|
|
|
|
|
[TestInitialize]
|
|
|
|
|
public void Setup()
|
|
|
|
|
{
|
|
|
|
|
_connection = Helpers.CreateAndOpenDatabase(StoreName);
|
|
|
|
|
|
|
|
|
|
var script = @"
|
|
|
|
|
CREATE TABLE `Cookies` (
|
|
|
|
|
`CookieId` counter NOT NULL,
|
|
|
|
|
`Name` text NULL,
|
|
|
|
|
CONSTRAINT `PK_Cookies` PRIMARY KEY (`CookieId`)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
INSERT INTO `Cookies` (`Name`) VALUES ('Basic');
|
|
|
|
|
INSERT INTO `Cookies` (`Name`) VALUES ('Chocolate Chip');
|
|
|
|
|
";
|
|
|
|
|
|
|
|
|
|
Helpers.ExecuteScript(_connection, script);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestCleanup]
|
|
|
|
|
public void TearDown()
|
|
|
|
|
{
|
|
|
|
|
_connection?.Close();
|
|
|
|
|
Helpers.DeleteDatabase(StoreName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void Delete_rollback_implicit()
|
|
|
|
|
{
|
|
|
|
|
using (var transaction = _connection.BeginTransaction())
|
|
|
|
|
{
|
|
|
|
|
using var deleteCommand = _connection.CreateCommand();
|
|
|
|
|
deleteCommand.CommandText = @"delete * from `Cookies` where `Name` = 'Basic'";
|
|
|
|
|
deleteCommand.Transaction = transaction;
|
|
|
|
|
var affected = deleteCommand.ExecuteNonQuery();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(1, affected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using var verifyCommand = _connection.CreateCommand();
|
|
|
|
|
verifyCommand.CommandText = @"select count(*) as `Count` from `Cookies`";
|
|
|
|
|
var count = verifyCommand.ExecuteScalar();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(2, count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void Delete_rollback_explicit()
|
|
|
|
|
{
|
|
|
|
|
using (var transaction = _connection.BeginTransaction())
|
|
|
|
|
{
|
|
|
|
|
using var deleteCommand = _connection.CreateCommand();
|
|
|
|
|
deleteCommand.CommandText = @"delete * from `Cookies` where `Name` = 'Basic'";
|
|
|
|
|
deleteCommand.Transaction = transaction;
|
|
|
|
|
var affected = deleteCommand.ExecuteNonQuery();
|
|
|
|
|
|
|
|
|
|
transaction.Rollback();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(1, affected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using var verifyCommand = _connection.CreateCommand();
|
|
|
|
|
verifyCommand.CommandText = @"select count(*) as `Count` from `Cookies`";
|
|
|
|
|
var count = verifyCommand.ExecuteScalar();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(2, count);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|