Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Dapper
提交
2e25a5a1
D
Dapper
项目概览
int
/
Dapper
11 个月 前同步成功
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Dapper
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2e25a5a1
编写于
5月 11, 2011
作者:
S
Sam Saffron
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
added support for dynamic params
上级
c340cffd
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
99 addition
and
3 deletion
+99
-3
Dapper/SqlMapper.cs
Dapper/SqlMapper.cs
+81
-3
Tests/Tests.cs
Tests/Tests.cs
+18
-0
未找到文件。
Dapper/SqlMapper.cs
浏览文件 @
2e25a5a1
...
...
@@ -16,8 +16,13 @@
namespace
Dapper
{
public
static
class
SqlMapper
public
static
partial
class
SqlMapper
{
public
interface
IDynamicParameters
{
void
AddParameter
(
IDbCommand
command
);
}
class
CacheInfo
{
public
object
Deserializer
{
get
;
set
;
}
...
...
@@ -142,7 +147,7 @@ public bool Equals(Identity other)
/// Execute parameterized SQL
/// </summary>
/// <returns>Number of rows affected</returns>
public
static
int
Execute
(
this
IDbConnection
cnn
,
string
sql
,
object
param
=
null
,
IDbTransaction
transaction
=
null
,
int
?
commandTimeout
=
null
)
public
static
int
Execute
(
this
IDbConnection
cnn
,
string
sql
,
dynamic
param
=
null
,
IDbTransaction
transaction
=
null
,
int
?
commandTimeout
=
null
)
{
var
identity
=
new
Identity
(
sql
,
cnn
,
null
,
param
==
null
?
null
:
param
.
GetType
());
var
info
=
GetCacheInfo
(
param
,
identity
);
...
...
@@ -373,7 +378,14 @@ private static CacheInfo GetCacheInfo(object param, Identity identity)
info
=
new
CacheInfo
();
if
(
param
!=
null
)
{
info
.
ParamReader
=
CreateParamInfoGenerator
(
param
.
GetType
());
if
(
param
is
IDynamicParameters
)
{
info
.
ParamReader
=
(
cmd
,
obj
)
=>
{
(
obj
as
IDynamicParameters
).
AddParameter
(
cmd
);
};
}
else
{
info
.
ParamReader
=
CreateParamInfoGenerator
(
param
.
GetType
());
}
}
}
return
info
;
...
...
@@ -494,6 +506,8 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
}
}
private
static
Action
<
IDbCommand
,
object
>
CreateParamInfoGenerator
(
Type
type
)
{
var
dm
=
new
DynamicMethod
(
string
.
Format
(
"ParamInfo{0}"
,
Guid
.
NewGuid
()),
null
,
new
[]
{
typeof
(
IDbCommand
),
typeof
(
object
)
},
type
,
true
);
...
...
@@ -901,4 +915,68 @@ public void Dispose()
}
}
}
public
class
DynamicParameters
:
SqlMapper
.
IDynamicParameters
,
IEnumerable
{
Dictionary
<
string
,
ParamInfo
>
parameters
=
new
Dictionary
<
string
,
ParamInfo
>();
class
ParamInfo
{
public
string
Name
{
get
;
set
;
}
public
object
Value
{
get
;
set
;
}
public
ParameterDirection
ParameterDirection
{
get
;
set
;
}
public
DbType
?
DbType
{
get
;
set
;
}
public
int
?
Size
{
get
;
set
;
}
public
IDbDataParameter
AttachedParam
{
get
;
set
;
}
}
public
void
Add
(
string
name
,
object
value
=
null
,
DbType
?
dbType
=
null
,
ParameterDirection
?
direction
=
null
,
int
?
size
=
null
)
{
parameters
[
name
]
=
new
ParamInfo
()
{
Name
=
name
,
Value
=
value
,
ParameterDirection
=
direction
??
ParameterDirection
.
Input
,
DbType
=
dbType
,
Size
=
size
};
}
void
SqlMapper
.
IDynamicParameters
.
AddParameter
(
IDbCommand
command
)
{
foreach
(
var
param
in
parameters
.
Values
)
{
var
p
=
command
.
CreateParameter
();
var
val
=
param
.
Value
;
p
.
ParameterName
=
param
.
Name
;
p
.
Value
=
val
;
p
.
Direction
=
param
.
ParameterDirection
;
var
s
=
val
as
string
;
if
(
s
!=
null
)
{
if
(
s
.
Length
<
4000
)
{
p
.
Size
=
4000
;
}
}
if
(
param
.
Size
!=
null
)
{
p
.
Size
=
param
.
Size
.
Value
;
}
if
(
param
.
DbType
!=
null
)
{
p
.
DbType
=
param
.
DbType
.
Value
;
}
command
.
Parameters
.
Add
(
p
);
param
.
AttachedParam
=
p
;
}
}
public
object
this
[
string
name
]
{
get
{
return
parameters
[
name
].
AttachedParam
.
Value
;
}
}
public
IEnumerator
GetEnumerator
()
{
throw
new
NotImplementedException
();
}
}
}
Tests/Tests.cs
浏览文件 @
2e25a5a1
...
...
@@ -5,6 +5,8 @@
using
Dapper
;
using
System.Data.SqlServerCe
;
using
System.IO
;
using
System.Data
;
using
System.Collections
;
namespace
SqlMapper
{
...
...
@@ -494,6 +496,22 @@ public void TestEnumWeirdness()
connection
.
Query
<
TestEnumClass
>(
"select cast(1 as tinyint) as [EnumEnum]"
);
}
public
void
TestSupportForParamDictionary
()
{
var
p
=
new
DynamicParameters
();
p
.
Add
(
"@name"
,
"bob"
);
p
.
Add
(
"@age"
,
dbType
:
DbType
.
Int32
,
direction
:
ParameterDirection
.
Output
);
connection
.
Query
<
string
>(
"set @age = 11 select @name"
,
p
).
First
().
IsEqualTo
(
"bob"
);
((
int
)
p
[
"@age"
]).
IsEqualTo
(
11
);
}
/* TODO:
*
public void TestMagicParam()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录