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
7de47221
Commit
7de47221
authored
Apr 05, 2011
by
Sam Saffron
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
amended massive test so it is not hackey ... pulled latest from Rob
parent
a09dcbd8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
45 additions
and
49 deletions
+45
-49
Massive.cs
Massive/Massive.cs
+42
-42
PerformanceTests.cs
PerformanceTests.cs
+3
-7
No files found.
Massive/Massive.cs
View file @
7de47221
...
...
@@ -66,14 +66,18 @@ public static List<dynamic> ToExpandoList(this IDataReader rdr)
var
result
=
new
List
<
dynamic
>();
while
(
rdr
.
Read
())
{
dynamic
e
=
new
ExpandoObject
();
var
d
=
e
as
IDictionary
<
string
,
object
>;
for
(
int
i
=
0
;
i
<
rdr
.
FieldCount
;
i
++)
d
.
Add
(
rdr
.
GetName
(
i
),
rdr
[
i
]);
result
.
Add
(
e
);
result
.
Add
(
rdr
.
RecordToExpando
());
}
return
result
;
}
public
static
dynamic
RecordToExpando
(
this
IDataReader
rdr
)
{
dynamic
e
=
new
ExpandoObject
();
var
d
=
e
as
IDictionary
<
string
,
object
>;
for
(
int
i
=
0
;
i
<
rdr
.
FieldCount
;
i
++)
d
.
Add
(
rdr
.
GetName
(
i
),
rdr
[
i
]);
return
e
;
}
/// <summary>
/// Turns the object into an ExpandoObject
/// </summary>
...
...
@@ -113,32 +117,28 @@ public class DynamicModel
DbProviderFactory
_factory
;
string
_connectionString
;
public
DynamicModel
(
string
connectionString
=
""
,
string
tableName
=
""
,
string
primaryKeyField
=
""
)
public
DynamicModel
(
string
connectionString
Name
=
""
,
string
tableName
=
""
,
string
primaryKeyField
=
""
)
{
_factory
=
DbProviderFactories
.
GetFactory
(
"System.Data.SqlClient"
);
/*
TableName = tableName == "" ? this.GetType().Name : tableName;
PrimaryKeyField = string.IsNullOrEmpty(primaryKeyField) ? "ID" : primaryKeyField;
if (connectionStringName == "")
connectionStringName = ConfigurationManager.ConnectionStrings[0].Name;
var _providerName = "System.Data.SqlClient";
_factory
=
DbProviderFactories
.
GetFactory
(
_providerName
);
_connectionString
=
connectionString
;
}
public
virtual
List
<
dynamic
>
QueryHacked
(
string
sql
,
DbConnection
connection
,
params
object
[]
args
)
{
List
<
dynamic
>
list
=
new
List
<
dynamic
>();
using
(
var
rdr
=
CreateCommand
(
sql
,
connection
,
args
).
ExecuteReader
(
CommandBehavior
.
Default
))
while
(
rdr
.
Read
())
if (ConfigurationManager.ConnectionStrings[connectionStringName] != null)
{
if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName))
_providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName;
}
else
{
var
e
=
new
ExpandoObject
();
var
d
=
e
as
IDictionary
<
string
,
object
>;
for
(
var
i
=
0
;
i
<
rdr
.
FieldCount
;
i
++)
d
.
Add
(
rdr
.
GetName
(
i
),
rdr
[
i
]);
list
.
Add
(
e
);
throw new InvalidOperationException("Can't find a connection string with the name '" + connectionStringName + "'");
}
return
list
;
_factory = DbProviderFactories.GetFactory(_providerName);
_connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
*/
}
/// <summary>
/// Enumerates the reader yielding the result - thanks to Jeroen Haegebaert
/// </summary>
...
...
@@ -146,23 +146,23 @@ public virtual IEnumerable<dynamic> Query(string sql, params object[] args)
{
using
(
var
conn
=
OpenConnection
())
{
var
rdr
=
CreateCommand
(
sql
,
conn
,
args
).
ExecuteReader
(
CommandBehavior
.
CloseConnection
);
var
rdr
=
CreateCommand
(
sql
,
conn
,
args
).
ExecuteReader
();
while
(
rdr
.
Read
())
{
var
e
=
new
ExpandoObject
();
var
d
=
e
as
IDictionary
<
string
,
object
>;
for
(
var
i
=
0
;
i
<
rdr
.
FieldCount
;
i
++)
d
.
Add
(
rdr
.
GetName
(
i
),
rdr
[
i
]);
yield
return
e
;
yield
return
rdr
.
RecordToExpando
();
;
}
}
}
/// <summary>
/// Runs a query against the database
/// </summary>
public
virtual
IList
<
dynamic
>
Fetch
(
string
sql
,
params
object
[]
args
)
public
virtual
IEnumerable
<
dynamic
>
Query
(
string
sql
,
DbConnection
connection
,
params
object
[]
args
)
{
return
Query
(
sql
,
args
).
ToList
<
dynamic
>();
using
(
var
rdr
=
CreateCommand
(
sql
,
connection
,
args
).
ExecuteReader
())
{
while
(
rdr
.
Read
())
{
yield
return
rdr
.
RecordToExpando
();
;
}
}
}
/// <summary>
/// Returns a single result
...
...
@@ -181,8 +181,7 @@ public virtual object Scalar(string sql, params object[] args)
/// </summary>
DbCommand
CreateCommand
(
string
sql
,
DbConnection
conn
,
params
object
[]
args
)
{
DbCommand
result
=
null
;
result
=
_factory
.
CreateCommand
();
var
result
=
_factory
.
CreateCommand
();
result
.
Connection
=
conn
;
result
.
CommandText
=
sql
;
if
(
args
.
Length
>
0
)
...
...
@@ -194,10 +193,10 @@ DbCommand CreateCommand(string sql, DbConnection conn, params object[] args)
/// </summary>
public
virtual
DbConnection
OpenConnection
()
{
var
conn
=
_factory
.
CreateConnection
();
conn
.
ConnectionString
=
_connectionString
;
conn
.
Open
();
return
conn
;
var
result
=
_factory
.
CreateConnection
();
result
.
ConnectionString
=
_connectionString
;
result
.
Open
();
return
result
;
}
/// <summary>
/// Builds a set of Insert and Update commands based on the passed-on objects.
...
...
@@ -436,7 +435,8 @@ public virtual dynamic Paged(string where = "", string orderBy = "", string colu
public
virtual
dynamic
Single
(
object
key
,
string
columns
=
"*"
)
{
var
sql
=
string
.
Format
(
"SELECT {0} FROM {1} WHERE {2} = @0"
,
columns
,
TableName
,
PrimaryKeyField
);
return
Fetch
(
sql
,
key
).
FirstOrDefault
();
var
items
=
Query
(
sql
,
key
).
ToList
();
return
items
.
FirstOrDefault
();
}
}
}
\ No newline at end of file
PerformanceTests.cs
View file @
7de47221
...
...
@@ -94,13 +94,9 @@ public void Run(int iterations)
tests
.
Add
(
id
=>
mapperConnection2
.
ExecuteMapperQuery
(
"select * from Posts where Id = @Id"
,
new
{
Id
=
id
}).
ToList
(),
"Dynamic Mapper Query"
);
var
massiveConnection
=
new
DynamicModel
(
Program
.
connectionString
);
tests
.
Add
(
id
=>
massiveConnection
.
Query
(
"select * from Posts where Id = @0"
,
id
).
ToList
(),
"Dynamic Massive ORM Query"
);
// Massive was hacked a bit to support an open connection, the intention is to add this to the API at some point
var
massiveConnection2
=
new
DynamicModel
(
Program
.
connectionString
);
var
hackedConnection
=
Program
.
GetOpenConnection
();
tests
.
Add
(
id
=>
massiveConnection
.
QueryHacked
(
"select * from Posts where Id = @0"
,
hackedConnection
,
id
).
ToList
(),
"Dynamic Massive ORM Query (hacked)"
);
var
massiveModel
=
new
DynamicModel
(
Program
.
connectionString
);
var
massiveConnection
=
Program
.
GetOpenConnection
();
tests
.
Add
(
id
=>
massiveModel
.
Query
(
"select * from Posts where Id = @0"
,
massiveConnection
,
id
).
ToList
(),
"Dynamic Massive ORM Query"
);
// HAND CODED
...
...
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