Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
Dapper
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tsai
Dapper
Commits
63062d96
Commit
63062d96
authored
Apr 18, 2012
by
Brannon Jones
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding support for commands with an existing/default/inherited transaction.
parent
c7dcf4f8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
122 additions
and
7 deletions
+122
-7
SqlMapper.cs
Dapper/SqlMapper.cs
+2
-1
Tests.cs
Tests/Tests.cs
+120
-6
No files found.
Dapper/SqlMapper.cs
View file @
63062d96
...
@@ -1372,7 +1372,8 @@ private static IDbCommand SetupCommand(IDbConnection cnn, IDbTransaction transac
...
@@ -1372,7 +1372,8 @@ private static IDbCommand SetupCommand(IDbConnection cnn, IDbTransaction transac
var
cmd
=
cnn
.
CreateCommand
();
var
cmd
=
cnn
.
CreateCommand
();
var
bindByName
=
GetBindByName
(
cmd
.
GetType
());
var
bindByName
=
GetBindByName
(
cmd
.
GetType
());
if
(
bindByName
!=
null
)
bindByName
(
cmd
,
true
);
if
(
bindByName
!=
null
)
bindByName
(
cmd
,
true
);
cmd
.
Transaction
=
transaction
;
if
(
transaction
!=
null
)
cmd
.
Transaction
=
transaction
;
cmd
.
CommandText
=
sql
;
cmd
.
CommandText
=
sql
;
if
(
commandTimeout
.
HasValue
)
if
(
commandTimeout
.
HasValue
)
cmd
.
CommandTimeout
=
commandTimeout
.
Value
;
cmd
.
CommandTimeout
=
commandTimeout
.
Value
;
...
...
Tests/Tests.cs
View file @
63062d96
...
@@ -769,12 +769,6 @@ public void TestEnumWeirdness()
...
@@ -769,12 +769,6 @@ public void TestEnumWeirdness()
connection
.
Query
<
TestEnumClass
>(
"select null as [EnumEnum]"
).
First
().
EnumEnum
.
IsEqualTo
(
null
);
connection
.
Query
<
TestEnumClass
>(
"select null as [EnumEnum]"
).
First
().
EnumEnum
.
IsEqualTo
(
null
);
connection
.
Query
<
TestEnumClass
>(
"select cast(1 as tinyint) as [EnumEnum]"
).
First
().
EnumEnum
.
IsEqualTo
(
TestEnum
.
Bla
);
connection
.
Query
<
TestEnumClass
>(
"select cast(1 as tinyint) as [EnumEnum]"
).
First
().
EnumEnum
.
IsEqualTo
(
TestEnum
.
Bla
);
}
}
void
Foo
()
{
string
s
=
"Bla"
;
var
obj
=
new
TestEnumClassNoNull
();
obj
.
EnumEnum
=
(
TestEnum
)
Enum
.
Parse
(
typeof
(
TestEnum
),
s
,
true
);
}
public
void
TestEnumStrings
()
public
void
TestEnumStrings
()
{
{
connection
.
Query
<
TestEnumClassNoNull
>(
"select 'BLA' as [EnumEnum]"
).
First
().
EnumEnum
.
IsEqualTo
(
TestEnum
.
Bla
);
connection
.
Query
<
TestEnumClassNoNull
>(
"select 'BLA' as [EnumEnum]"
).
First
().
EnumEnum
.
IsEqualTo
(
TestEnum
.
Bla
);
...
@@ -1393,6 +1387,126 @@ public enum ShortEnum : short
...
@@ -1393,6 +1387,126 @@ public enum ShortEnum : short
Zero
=
0
,
One
=
1
,
Two
=
2
,
Three
=
3
,
Four
=
4
,
Five
=
5
,
Six
=
6
Zero
=
0
,
One
=
1
,
Two
=
2
,
Three
=
3
,
Four
=
4
,
Five
=
5
,
Six
=
6
}
}
public
void
TestTransactionCommit
()
{
try
{
connection
.
Execute
(
"create table #TransactionTest ([ID] int, [Value] varchar(32));"
);
using
(
var
transaction
=
connection
.
BeginTransaction
())
{
connection
.
Execute
(
"insert into #TransactionTest ([ID], [Value]) values (1, 'ABC');"
,
transaction
:
transaction
);
transaction
.
Commit
();
}
connection
.
Query
<
int
>(
"select count(*) from #TransactionTest;"
).
Single
().
IsEqualTo
(
1
);
}
finally
{
connection
.
Execute
(
"drop table #TransactionTest;"
);
}
}
public
void
TestTransactionRollback
()
{
connection
.
Execute
(
"create table #TransactionTest ([ID] int, [Value] varchar(32));"
);
try
{
using
(
var
transaction
=
connection
.
BeginTransaction
())
{
connection
.
Execute
(
"insert into #TransactionTest ([ID], [Value]) values (1, 'ABC');"
,
transaction
:
transaction
);
transaction
.
Rollback
();
}
connection
.
Query
<
int
>(
"select count(*) from #TransactionTest;"
).
Single
().
IsEqualTo
(
0
);
}
finally
{
connection
.
Execute
(
"drop table #TransactionTest;"
);
}
}
public
void
TestCommandWithInheritedTransaction
()
{
connection
.
Execute
(
"create table #TransactionTest ([ID] int, [Value] varchar(32));"
);
try
{
using
(
var
transaction
=
connection
.
BeginTransaction
())
{
var
transactedConnection
=
new
TransactedConnection
(
connection
,
transaction
);
transactedConnection
.
Execute
(
"insert into #TransactionTest ([ID], [Value]) values (1, 'ABC');"
);
transaction
.
Rollback
();
}
connection
.
Query
<
int
>(
"select count(*) from #TransactionTest;"
).
Single
().
IsEqualTo
(
0
);
}
finally
{
connection
.
Execute
(
"drop table #TransactionTest;"
);
}
}
class
TransactedConnection
:
IDbConnection
{
IDbConnection
_conn
;
IDbTransaction
_tran
;
public
TransactedConnection
(
IDbConnection
conn
,
IDbTransaction
tran
)
{
_conn
=
conn
;
_tran
=
tran
;
}
public
string
ConnectionString
{
get
{
return
_conn
.
ConnectionString
;
}
set
{
_conn
.
ConnectionString
=
value
;
}
}
public
int
ConnectionTimeout
{
get
{
return
_conn
.
ConnectionTimeout
;
}
}
public
string
Database
{
get
{
return
_conn
.
Database
;
}
}
public
ConnectionState
State
{
get
{
return
_conn
.
State
;
}
}
public
IDbTransaction
BeginTransaction
(
IsolationLevel
il
)
{
throw
new
NotImplementedException
();
}
public
IDbTransaction
BeginTransaction
()
{
return
_tran
;
}
public
void
ChangeDatabase
(
string
databaseName
)
{
_conn
.
ChangeDatabase
(
databaseName
);
}
public
void
Close
()
{
_conn
.
Close
();
}
public
IDbCommand
CreateCommand
()
{
// The command inherits the "current" transaction.
var
command
=
_conn
.
CreateCommand
();
command
.
Transaction
=
_tran
;
return
command
;
}
public
void
Dispose
()
{
_conn
.
Dispose
();
}
public
void
Open
()
{
_conn
.
Open
();
}
}
#if POSTGRESQL
#if POSTGRESQL
class
Cat
class
Cat
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment