Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Dapper
提交
0bba6966
D
Dapper
项目概览
int
/
Dapper
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
0bba6966
编写于
5月 20, 2011
作者:
M
mgravell
浏览文件
操作
浏览文件
下载
差异文件
Automated merge with
https://dapper-dot-net.googlecode.com/hg/
上级
df9fe51e
6b092ad8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
84 addition
and
2 deletion
+84
-2
Dapper/SqlMapper.cs
Dapper/SqlMapper.cs
+39
-2
Tests/Tests.cs
Tests/Tests.cs
+45
-0
未找到文件。
Dapper/SqlMapper.cs
浏览文件 @
0bba6966
...
...
@@ -692,6 +692,15 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
foreach
(
var
prop
in
type
.
GetProperties
().
OrderBy
(
p
=>
p
.
Name
))
{
if
(
prop
.
PropertyType
==
typeof
(
DbString
))
{
il
.
Emit
(
OpCodes
.
Ldloc_0
);
// stack is now [parameters] [typed-param]
il
.
Emit
(
OpCodes
.
Callvirt
,
prop
.
GetGetMethod
());
// stack is [parameters] [dbstring]
il
.
Emit
(
OpCodes
.
Ldarg_0
);
// stack is now [parameters] [dbstring] [command]
il
.
Emit
(
OpCodes
.
Ldstr
,
"@"
+
prop
.
Name
);
// stack is now [parameters] [dbstring] [command] [name]
il
.
EmitCall
(
OpCodes
.
Callvirt
,
typeof
(
DbString
).
GetMethod
(
"AddParameter"
),
null
);
// stack is now [parameters]
continue
;
}
DbType
dbType
=
LookupDbType
(
prop
.
PropertyType
);
if
(
dbType
==
DbType
.
Xml
)
{
...
...
@@ -1109,12 +1118,12 @@ void SqlMapper.IDynamicParameters.AddParameter(IDbCommand command)
var
p
=
command
.
CreateParameter
();
var
val
=
param
.
Value
;
p
.
ParameterName
=
param
.
Name
;
p
.
Value
=
val
;
p
.
Value
=
val
??
DBNull
.
Value
;
p
.
Direction
=
param
.
ParameterDirection
;
var
s
=
val
as
string
;
if
(
s
!=
null
)
{
if
(
s
.
Length
<
4000
)
if
(
s
.
Length
<
=
4000
)
{
p
.
Size
=
4000
;
}
...
...
@@ -1137,4 +1146,32 @@ public T Get<T>(string name)
return
(
T
)
parameters
[
name
].
AttachedParam
.
Value
;
}
}
public
sealed
class
DbString
{
public
DbString
()
{
Length
=
-
1
;
}
public
bool
IsAnsi
{
get
;
set
;
}
public
bool
IsFixedLength
{
get
;
set
;
}
public
int
Length
{
get
;
set
;
}
public
string
Value
{
get
;
set
;
}
public
void
AddParameter
(
IDbCommand
command
,
string
name
)
{
if
(
IsFixedLength
&&
Length
==
-
1
)
{
throw
new
InvalidOperationException
(
"If specifying IsFixedLength, a Length must also be specified"
);
}
var
param
=
command
.
CreateParameter
();
param
.
ParameterName
=
name
;
param
.
Value
=
(
object
)
Value
??
DBNull
.
Value
;
if
(
Length
==
-
1
&&
Value
!=
null
&&
Value
.
Length
<=
4000
)
{
param
.
Size
=
4000
;
}
else
{
param
.
Size
=
Length
;
}
param
.
DbType
=
IsAnsi
?
(
IsFixedLength
?
DbType
.
AnsiStringFixedLength
:
DbType
.
AnsiString
)
:
(
IsFixedLength
?
DbType
.
StringFixedLength
:
DbType
.
String
);
command
.
Parameters
.
Add
(
param
);
}
}
}
Tests/Tests.cs
浏览文件 @
0bba6966
...
...
@@ -337,6 +337,31 @@ public void TestMultiMapDynamic()
connection
.
Execute
(
"drop table #Users drop table #Posts"
);
}
class
Product
{
public
int
Id
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
public
Category
Category
{
get
;
set
;
}
}
class
Category
{
public
int
Id
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
}
public
void
TestMultiMapWithSplit
()
// http://stackoverflow.com/q/6056778/23354
{
var
sql
=
@"select 1 as id, 'abc' as name, 2 as id, 'def' as name"
;
var
product
=
connection
.
Query
<
Product
,
Category
,
Product
>(
sql
,
(
prod
,
cat
)
=>
{
prod
.
Category
=
cat
;
return
prod
;
}).
First
();
// assertions
product
.
Id
.
IsEqualTo
(
1
);
product
.
Name
.
IsEqualTo
(
"abc"
);
product
.
Category
.
Id
.
IsEqualTo
(
2
);
product
.
Category
.
Name
.
IsEqualTo
(
"def"
);
}
public
void
TestFieldsAndPrivates
()
{
var
data
=
connection
.
Query
<
TestFieldCaseAndPrivatesEntity
>(
...
...
@@ -544,6 +569,26 @@ select 1111
}
public
void
TestDbString
()
{
var
obj
=
connection
.
Query
(
"select datalength(@a) as a, datalength(@b) as b, datalength(@c) as c, datalength(@d) as d, datalength(@e) as e, datalength(@f) as f"
,
new
{
a
=
new
DbString
{
Value
=
"abcde"
,
IsFixedLength
=
true
,
Length
=
10
,
IsAnsi
=
true
},
b
=
new
DbString
{
Value
=
"abcde"
,
IsFixedLength
=
true
,
Length
=
10
,
IsAnsi
=
false
},
c
=
new
DbString
{
Value
=
"abcde"
,
IsFixedLength
=
false
,
Length
=
10
,
IsAnsi
=
true
},
d
=
new
DbString
{
Value
=
"abcde"
,
IsFixedLength
=
false
,
Length
=
10
,
IsAnsi
=
false
},
e
=
new
DbString
{
Value
=
"abcde"
,
IsAnsi
=
true
},
f
=
new
DbString
{
Value
=
"abcde"
,
IsAnsi
=
false
},
}).
First
();
((
int
)
obj
.
a
).
IsEqualTo
(
10
);
((
int
)
obj
.
b
).
IsEqualTo
(
20
);
((
int
)
obj
.
c
).
IsEqualTo
(
5
);
((
int
)
obj
.
d
).
IsEqualTo
(
10
);
((
int
)
obj
.
e
).
IsEqualTo
(
5
);
((
int
)
obj
.
f
).
IsEqualTo
(
10
);
}
class
Person
{
public
int
PersonId
{
get
;
set
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录