Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Dapper
提交
0a9452d5
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,发现更多精彩内容 >>
提交
0a9452d5
编写于
6月 16, 2011
作者:
M
mgravell
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
help avoid thread race init on multi-map
上级
4e44f00a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
22 deletion
+23
-22
Dapper/SqlMapper.cs
Dapper/SqlMapper.cs
+23
-22
未找到文件。
Dapper/SqlMapper.cs
浏览文件 @
0a9452d5
...
...
@@ -486,7 +486,7 @@ class DontMap { }
static
IEnumerable
<
TReturn
>
MultiMapImpl
<
TFirst
,
TSecond
,
TThird
,
TFourth
,
TFifth
,
TReturn
>(
this
IDbConnection
cnn
,
string
sql
,
object
map
,
object
param
,
IDbTransaction
transaction
,
string
splitOn
,
int
?
commandTimeout
,
CommandType
?
commandType
,
IDataReader
reader
,
Identity
identity
)
{
identity
=
identity
??
new
Identity
(
sql
,
cnn
,
typeof
(
TFirst
),
(
object
)
param
==
null
?
null
:
((
object
)
param
).
GetType
(),
new
[]
{
typeof
(
TFirst
),
typeof
(
TSecond
),
typeof
(
TThird
),
typeof
(
TFourth
),
typeof
(
TFifth
)
});
CacheInfo
info
=
GetCacheInfo
(
identity
);
CacheInfo
c
info
=
GetCacheInfo
(
identity
);
IDbCommand
ownedCommand
=
null
;
IDataReader
ownedReader
=
null
;
...
...
@@ -495,12 +495,13 @@ class DontMap { }
{
if
(
reader
==
null
)
{
ownedCommand
=
SetupCommand
(
cnn
,
transaction
,
sql
,
info
.
ParamReader
,
(
object
)
param
,
commandTimeout
,
commandType
);
ownedCommand
=
SetupCommand
(
cnn
,
transaction
,
sql
,
c
info
.
ParamReader
,
(
object
)
param
,
commandTimeout
,
commandType
);
ownedReader
=
ownedCommand
.
ExecuteReader
();
reader
=
ownedReader
;
}
if
(
info
.
Deserializer
==
null
)
object
deserializer
;
object
[]
otherDeserializers
;
if
((
deserializer
=
cinfo
.
Deserializer
)
==
null
||
(
otherDeserializers
=
cinfo
.
OtherDeserializers
)
==
null
)
{
int
current
=
0
;
...
...
@@ -530,7 +531,7 @@ class DontMap { }
var
otherDeserializer
=
new
List
<
object
>();
int
split
=
nextSplit
();
info
.
Deserializer
=
GetDeserializer
<
TFirst
>(
reader
,
0
,
split
,
false
);
deserializer
=
c
info
.
Deserializer
=
GetDeserializer
<
TFirst
>(
reader
,
0
,
split
,
false
);
if
(
typeof
(
TSecond
)
!=
typeof
(
DontMap
))
{
...
...
@@ -556,45 +557,45 @@ class DontMap { }
otherDeserializer
.
Add
(
GetDeserializer
<
TFifth
>(
reader
,
split
,
next
-
split
,
true
));
}
info
.
OtherDeserializers
=
otherDeserializer
.
ToArray
();
otherDeserializers
=
c
info
.
OtherDeserializers
=
otherDeserializer
.
ToArray
();
SetQueryCache
(
identity
,
info
);
SetQueryCache
(
identity
,
c
info
);
}
var
deserializer
=
(
Func
<
IDataReader
,
TFirst
>)
info
.
D
eserializer
;
var
deserializer2
=
(
Func
<
IDataReader
,
TSecond
>)
info
.
O
therDeserializers
[
0
];
var
rootDeserializer
=
(
Func
<
IDataReader
,
TFirst
>)
d
eserializer
;
var
deserializer2
=
(
Func
<
IDataReader
,
TSecond
>)
o
therDeserializers
[
0
];
Func
<
IDataReader
,
TReturn
>
mapIt
=
null
;
if
(
info
.
O
therDeserializers
.
Length
==
1
)
if
(
o
therDeserializers
.
Length
==
1
)
{
mapIt
=
r
=>
((
Func
<
TFirst
,
TSecond
,
TReturn
>)
map
)(
d
eserializer
(
r
),
deserializer2
(
r
));
mapIt
=
r
=>
((
Func
<
TFirst
,
TSecond
,
TReturn
>)
map
)(
rootD
eserializer
(
r
),
deserializer2
(
r
));
}
if
(
info
.
O
therDeserializers
.
Length
>
1
)
if
(
o
therDeserializers
.
Length
>
1
)
{
var
deserializer3
=
(
Func
<
IDataReader
,
TThird
>)
info
.
O
therDeserializers
[
1
];
var
deserializer3
=
(
Func
<
IDataReader
,
TThird
>)
o
therDeserializers
[
1
];
if
(
info
.
O
therDeserializers
.
Length
==
2
)
if
(
o
therDeserializers
.
Length
==
2
)
{
mapIt
=
r
=>
((
Func
<
TFirst
,
TSecond
,
TThird
,
TReturn
>)
map
)(
d
eserializer
(
r
),
deserializer2
(
r
),
deserializer3
(
r
));
mapIt
=
r
=>
((
Func
<
TFirst
,
TSecond
,
TThird
,
TReturn
>)
map
)(
rootD
eserializer
(
r
),
deserializer2
(
r
),
deserializer3
(
r
));
}
if
(
info
.
O
therDeserializers
.
Length
>
2
)
if
(
o
therDeserializers
.
Length
>
2
)
{
var
deserializer4
=
(
Func
<
IDataReader
,
TFourth
>)
info
.
O
therDeserializers
[
2
];
if
(
info
.
O
therDeserializers
.
Length
==
3
)
var
deserializer4
=
(
Func
<
IDataReader
,
TFourth
>)
o
therDeserializers
[
2
];
if
(
o
therDeserializers
.
Length
==
3
)
{
mapIt
=
r
=>
((
Func
<
TFirst
,
TSecond
,
TThird
,
TFourth
,
TReturn
>)
map
)(
d
eserializer
(
r
),
deserializer2
(
r
),
deserializer3
(
r
),
deserializer4
(
r
));
mapIt
=
r
=>
((
Func
<
TFirst
,
TSecond
,
TThird
,
TFourth
,
TReturn
>)
map
)(
rootD
eserializer
(
r
),
deserializer2
(
r
),
deserializer3
(
r
),
deserializer4
(
r
));
}
if
(
info
.
O
therDeserializers
.
Length
>
3
)
if
(
o
therDeserializers
.
Length
>
3
)
{
#if CSHARP30
throw
new
NotSupportedException
();
#else
var
deserializer5
=
(
Func
<
IDataReader
,
TFifth
>)
info
.
O
therDeserializers
[
3
];
mapIt
=
r
=>
((
Func
<
TFirst
,
TSecond
,
TThird
,
TFourth
,
TFifth
,
TReturn
>)
map
)(
d
eserializer
(
r
),
deserializer2
(
r
),
deserializer3
(
r
),
deserializer4
(
r
),
deserializer5
(
r
));
var
deserializer5
=
(
Func
<
IDataReader
,
TFifth
>)
o
therDeserializers
[
3
];
mapIt
=
r
=>
((
Func
<
TFirst
,
TSecond
,
TThird
,
TFourth
,
TFifth
,
TReturn
>)
map
)(
rootD
eserializer
(
r
),
deserializer2
(
r
),
deserializer3
(
r
),
deserializer4
(
r
),
deserializer5
(
r
));
#endif
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录