Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
NPoco
提交
33be5b84
N
NPoco
项目概览
jobily
/
NPoco
9 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
NPoco
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
33be5b84
编写于
10月 24, 2020
作者:
A
Adam Schroder
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add exact column name matching which doesn't remove underscores to match column names #351
上级
9079b627
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
39 addition
and
6 deletion
+39
-6
src/NPoco/ColumnAttribute.cs
src/NPoco/ColumnAttribute.cs
+1
-0
src/NPoco/ColumnInfo.cs
src/NPoco/ColumnInfo.cs
+2
-0
src/NPoco/FluentMappings/ColumnConfigurationBuilder.cs
src/NPoco/FluentMappings/ColumnConfigurationBuilder.cs
+8
-0
src/NPoco/FluentMappings/ColumnDefinition.cs
src/NPoco/FluentMappings/ColumnDefinition.cs
+1
-0
src/NPoco/FluentMappings/FluentMappingConfiguration.cs
src/NPoco/FluentMappings/FluentMappingConfiguration.cs
+1
-0
src/NPoco/FluentMappings/FluentMappingsPocoDataBuilder.cs
src/NPoco/FluentMappings/FluentMappingsPocoDataBuilder.cs
+1
-0
src/NPoco/PocoColumn.cs
src/NPoco/PocoColumn.cs
+1
-0
src/NPoco/PocoDataBuilder.cs
src/NPoco/PocoDataBuilder.cs
+1
-0
src/NPoco/RowMappers/PropertyMapper.cs
src/NPoco/RowMappers/PropertyMapper.cs
+3
-3
src/NPoco/RowMappers/PropertyMapperNameConvention.cs
src/NPoco/RowMappers/PropertyMapperNameConvention.cs
+3
-3
test/NPoco.Tests/NewMapper/NewMapperTests.cs
test/NPoco.Tests/NewMapper/NewMapperTests.cs
+17
-0
未找到文件。
src/NPoco/ColumnAttribute.cs
浏览文件 @
33be5b84
...
@@ -9,5 +9,6 @@ public class ColumnAttribute : Attribute
...
@@ -9,5 +9,6 @@ public class ColumnAttribute : Attribute
public
ColumnAttribute
(
string
name
)
{
Name
=
name
;
}
public
ColumnAttribute
(
string
name
)
{
Name
=
name
;
}
public
string
Name
{
get
;
set
;
}
public
string
Name
{
get
;
set
;
}
public
bool
ForceToUtc
{
get
;
set
;
}
=
true
;
public
bool
ForceToUtc
{
get
;
set
;
}
=
true
;
public
bool
ExactNameMatch
{
get
;
set
;
}
}
}
}
}
\ No newline at end of file
src/NPoco/ColumnInfo.cs
浏览文件 @
33be5b84
...
@@ -25,6 +25,7 @@ public class ColumnInfo
...
@@ -25,6 +25,7 @@ public class ColumnInfo
public
ReferenceType
ReferenceType
{
get
;
set
;
}
public
ReferenceType
ReferenceType
{
get
;
set
;
}
public
string
ReferenceMemberName
{
get
;
set
;
}
public
string
ReferenceMemberName
{
get
;
set
;
}
public
MemberInfo
MemberInfo
{
get
;
internal
set
;
}
public
MemberInfo
MemberInfo
{
get
;
internal
set
;
}
public
bool
ExactColumnNameMatch
{
get
;
set
;
}
public
static
ColumnInfo
FromMemberInfo
(
MemberInfo
mi
)
public
static
ColumnInfo
FromMemberInfo
(
MemberInfo
mi
)
{
{
...
@@ -84,6 +85,7 @@ public static ColumnInfo FromMemberInfo(MemberInfo mi)
...
@@ -84,6 +85,7 @@ public static ColumnInfo FromMemberInfo(MemberInfo mi)
{
{
ci
.
ColumnName
=
colAttrs
.
FirstOrDefault
(
x
=>
!
string
.
IsNullOrEmpty
(
x
.
Name
))?.
Name
??
mi
.
Name
;
ci
.
ColumnName
=
colAttrs
.
FirstOrDefault
(
x
=>
!
string
.
IsNullOrEmpty
(
x
.
Name
))?.
Name
??
mi
.
Name
;
ci
.
ForceToUtc
=
colAttrs
.
All
(
x
=>
x
.
ForceToUtc
);
ci
.
ForceToUtc
=
colAttrs
.
All
(
x
=>
x
.
ForceToUtc
);
ci
.
ExactColumnNameMatch
=
colAttrs
.
All
(
x
=>
x
.
ExactNameMatch
);
var
resultAttr
=
colAttrs
.
OfType
<
ResultColumnAttribute
>().
FirstOrDefault
();
var
resultAttr
=
colAttrs
.
OfType
<
ResultColumnAttribute
>().
FirstOrDefault
();
ci
.
ResultColumn
=
resultAttr
!=
null
;
ci
.
ResultColumn
=
resultAttr
!=
null
;
...
...
src/NPoco/FluentMappings/ColumnConfigurationBuilder.cs
浏览文件 @
33be5b84
...
@@ -101,6 +101,7 @@ public IManyColumnBuilder<TModel> Reference(Expression<Func<TModel, object>> mem
...
@@ -101,6 +101,7 @@ public IManyColumnBuilder<TModel> Reference(Expression<Func<TModel, object>> mem
public
interface
IColumnBuilder
<
TModel
>
public
interface
IColumnBuilder
<
TModel
>
{
{
IColumnBuilder
<
TModel
>
WithName
(
string
name
);
IColumnBuilder
<
TModel
>
WithName
(
string
name
);
IColumnBuilder
<
TModel
>
WithName
(
string
name
,
bool
exactMatch
);
IColumnBuilder
<
TModel
>
WithAlias
(
string
alias
);
IColumnBuilder
<
TModel
>
WithAlias
(
string
alias
);
IColumnBuilder
<
TModel
>
WithDbType
(
Type
type
);
IColumnBuilder
<
TModel
>
WithDbType
(
Type
type
);
IColumnBuilder
<
TModel
>
WithDbType
<
T
>();
IColumnBuilder
<
TModel
>
WithDbType
<
T
>();
...
@@ -134,6 +135,13 @@ public IColumnBuilder<TModel> WithName(string name)
...
@@ -134,6 +135,13 @@ public IColumnBuilder<TModel> WithName(string name)
return
this
;
return
this
;
}
}
public
IColumnBuilder
<
TModel
>
WithName
(
string
name
,
bool
exactMatch
)
{
_columnDefinition
.
DbColumnName
=
name
;
_columnDefinition
.
ExactColumnNameMatch
=
exactMatch
;
return
this
;
}
public
IColumnBuilder
<
TModel
>
WithAlias
(
string
alias
)
public
IColumnBuilder
<
TModel
>
WithAlias
(
string
alias
)
{
{
_columnDefinition
.
DbColumnAlias
=
alias
;
_columnDefinition
.
DbColumnAlias
=
alias
;
...
...
src/NPoco/FluentMappings/ColumnDefinition.cs
浏览文件 @
33be5b84
...
@@ -25,5 +25,6 @@ public class ColumnDefinition
...
@@ -25,5 +25,6 @@ public class ColumnDefinition
public
string
ComplexPrefix
{
get
;
set
;
}
public
string
ComplexPrefix
{
get
;
set
;
}
public
bool
?
ValueObjectColumn
{
get
;
set
;
}
public
bool
?
ValueObjectColumn
{
get
;
set
;
}
public
string
ValueObjectColumnName
{
get
;
set
;
}
public
string
ValueObjectColumnName
{
get
;
set
;
}
public
bool
?
ExactColumnNameMatch
{
get
;
set
;
}
}
}
}
}
\ No newline at end of file
src/NPoco/FluentMappings/FluentMappingConfiguration.cs
浏览文件 @
33be5b84
...
@@ -277,6 +277,7 @@ private static void MergeOverrides(Dictionary<Type, TypeDefinition> config, Mapp
...
@@ -277,6 +277,7 @@ private static void MergeOverrides(Dictionary<Type, TypeDefinition> config, Mapp
convColDefinition
.
IsComplexMapping
=
overrideColumnDefinition
.
Value
.
IsComplexMapping
??
convColDefinition
.
IsComplexMapping
;
convColDefinition
.
IsComplexMapping
=
overrideColumnDefinition
.
Value
.
IsComplexMapping
??
convColDefinition
.
IsComplexMapping
;
convColDefinition
.
ValueObjectColumn
=
overrideColumnDefinition
.
Value
.
ValueObjectColumn
??
convColDefinition
.
ValueObjectColumn
;
convColDefinition
.
ValueObjectColumn
=
overrideColumnDefinition
.
Value
.
ValueObjectColumn
??
convColDefinition
.
ValueObjectColumn
;
convColDefinition
.
ValueObjectColumnName
=
overrideColumnDefinition
.
Value
.
ValueObjectColumnName
??
convColDefinition
.
ValueObjectColumnName
;
convColDefinition
.
ValueObjectColumnName
=
overrideColumnDefinition
.
Value
.
ValueObjectColumnName
??
convColDefinition
.
ValueObjectColumnName
;
convColDefinition
.
ExactColumnNameMatch
=
overrideColumnDefinition
.
Value
.
ExactColumnNameMatch
??
convColDefinition
.
ExactColumnNameMatch
;
}
}
}
}
}
}
...
...
src/NPoco/FluentMappings/FluentMappingsPocoDataBuilder.cs
浏览文件 @
33be5b84
...
@@ -121,6 +121,7 @@ protected override ColumnInfo GetColumnInfo(MemberInfo mi, Type type)
...
@@ -121,6 +121,7 @@ protected override ColumnInfo GetColumnInfo(MemberInfo mi, Type type)
{
{
var
colattr
=
typeConfig
.
ColumnConfiguration
[
key
];
var
colattr
=
typeConfig
.
ColumnConfiguration
[
key
];
columnInfo
.
ColumnName
=
colattr
.
DbColumnName
;
columnInfo
.
ColumnName
=
colattr
.
DbColumnName
;
columnInfo
.
ExactColumnNameMatch
=
colattr
.
ExactColumnNameMatch
??
false
;
columnInfo
.
ColumnAlias
=
colattr
.
DbColumnAlias
;
columnInfo
.
ColumnAlias
=
colattr
.
DbColumnAlias
;
if
(
colattr
.
ResultColumn
.
HasValue
&&
colattr
.
ResultColumn
.
Value
)
if
(
colattr
.
ResultColumn
.
HasValue
&&
colattr
.
ResultColumn
.
Value
)
{
{
...
...
src/NPoco/PocoColumn.cs
浏览文件 @
33be5b84
...
@@ -53,6 +53,7 @@ public Type ColumnType
...
@@ -53,6 +53,7 @@ public Type ColumnType
public
bool
SerializedColumn
{
get
;
set
;
}
public
bool
SerializedColumn
{
get
;
set
;
}
public
bool
ValueObjectColumn
{
get
;
set
;
}
public
bool
ValueObjectColumn
{
get
;
set
;
}
public
string
ValueObjectColumnName
{
get
;
set
;
}
public
string
ValueObjectColumnName
{
get
;
set
;
}
public
bool
ExactColumnNameMatch
{
get
;
set
;
}
internal
void
SetMemberAccessors
(
List
<
MemberAccessor
>
memberAccessors
)
internal
void
SetMemberAccessors
(
List
<
MemberAccessor
>
memberAccessors
)
{
{
...
...
src/NPoco/PocoDataBuilder.cs
浏览文件 @
33be5b84
...
@@ -187,6 +187,7 @@ public IEnumerable<PocoMemberPlan> GetPocoMembers(ColumnInfo[] columnInfos, List
...
@@ -187,6 +187,7 @@ public IEnumerable<PocoMemberPlan> GetPocoMembers(ColumnInfo[] columnInfos, List
MemberInfoChain
=
members
,
MemberInfoChain
=
members
,
ColumnName
=
columnName
,
ColumnName
=
columnName
,
ResultColumn
=
capturedColumnInfo
.
ResultColumn
,
ResultColumn
=
capturedColumnInfo
.
ResultColumn
,
ExactColumnNameMatch
=
capturedColumnInfo
.
ExactColumnNameMatch
,
ForceToUtc
=
capturedColumnInfo
.
ForceToUtc
,
ForceToUtc
=
capturedColumnInfo
.
ForceToUtc
,
ComputedColumn
=
capturedColumnInfo
.
ComputedColumn
,
ComputedColumn
=
capturedColumnInfo
.
ComputedColumn
,
ComputedColumnType
=
capturedColumnInfo
.
ComputedColumnType
,
ComputedColumnType
=
capturedColumnInfo
.
ComputedColumnType
,
...
...
src/NPoco/RowMappers/PropertyMapper.cs
浏览文件 @
33be5b84
...
@@ -74,7 +74,7 @@ private MapPlan BuildMapPlan(DbDataReader dataReader, PocoData pocoData)
...
@@ -74,7 +74,7 @@ private MapPlan BuildMapPlan(DbDataReader dataReader, PocoData pocoData)
private
IEnumerable
<
MapPlan
>
BuildMapPlans
(
GroupResult
<
PosName
>
groupedName
,
DbDataReader
dataReader
,
PocoData
pocoData
,
List
<
PocoMember
>
pocoMembers
)
private
IEnumerable
<
MapPlan
>
BuildMapPlans
(
GroupResult
<
PosName
>
groupedName
,
DbDataReader
dataReader
,
PocoData
pocoData
,
List
<
PocoMember
>
pocoMembers
)
{
{
// find pocomember by property name
// find pocomember by property name
var
pocoMember
=
pocoMembers
.
FirstOrDefault
(
x
=>
IsEqual
(
groupedName
.
Item
,
x
.
Name
)
var
pocoMember
=
pocoMembers
.
FirstOrDefault
(
x
=>
IsEqual
(
groupedName
.
Item
,
x
.
Name
,
x
.
PocoColumn
?.
ExactColumnNameMatch
??
false
)
||
string
.
Equals
(
groupedName
.
Item
,
x
.
PocoColumn
?.
ColumnAlias
,
StringComparison
.
OrdinalIgnoreCase
));
||
string
.
Equals
(
groupedName
.
Item
,
x
.
PocoColumn
?.
ColumnAlias
,
StringComparison
.
OrdinalIgnoreCase
));
if
(
pocoMember
==
null
)
if
(
pocoMember
==
null
)
...
@@ -128,13 +128,13 @@ private IEnumerable<MapPlan> BuildMapPlans(GroupResult<PosName> groupedName, DbD
...
@@ -128,13 +128,13 @@ private IEnumerable<MapPlan> BuildMapPlans(GroupResult<PosName> groupedName, DbD
}
}
}
}
public
static
bool
IsEqual
(
string
name
,
string
value
)
public
static
bool
IsEqual
(
string
name
,
string
value
,
bool
exactMatch
)
{
{
if
(
value
is
null
)
if
(
value
is
null
)
return
false
;
return
false
;
return
string
.
Equals
(
value
,
name
,
StringComparison
.
OrdinalIgnoreCase
)
return
string
.
Equals
(
value
,
name
,
StringComparison
.
OrdinalIgnoreCase
)
||
string
.
Equals
(
value
,
name
.
Replace
(
"_"
,
""
),
StringComparison
.
OrdinalIgnoreCase
);
||
(!
exactMatch
&&
string
.
Equals
(
value
,
name
.
Replace
(
"_"
,
""
),
StringComparison
.
OrdinalIgnoreCase
)
);
}
}
private
bool
MapValue
(
GroupResult
<
PosName
>
posName
,
object
[]
values
,
Func
<
object
,
object
>
converter
,
object
instance
,
PocoColumn
pocoColumn
,
object
defaultValue
)
private
bool
MapValue
(
GroupResult
<
PosName
>
posName
,
object
[]
values
,
Func
<
object
,
object
>
converter
,
object
instance
,
PocoColumn
pocoColumn
,
object
defaultValue
)
...
...
src/NPoco/RowMappers/PropertyMapperNameConvention.cs
浏览文件 @
33be5b84
...
@@ -89,15 +89,15 @@ internal static PocoMember FindMember(IEnumerable<PocoMember> pocoMembers, strin
...
@@ -89,15 +89,15 @@ internal static PocoMember FindMember(IEnumerable<PocoMember> pocoMembers, strin
private
static
bool
IsPocoMemberEqual
(
PocoMember
pocoMember
,
string
name
)
private
static
bool
IsPocoMemberEqual
(
PocoMember
pocoMember
,
string
name
)
{
{
if
(
pocoMember
.
PocoColumn
==
null
)
if
(
pocoMember
.
PocoColumn
==
null
)
return
PropertyMapper
.
IsEqual
(
name
,
pocoMember
.
Name
);
return
PropertyMapper
.
IsEqual
(
name
,
pocoMember
.
Name
,
false
);
if
(
pocoMember
.
PocoColumn
.
MemberInfoKey
==
name
)
if
(
pocoMember
.
PocoColumn
.
MemberInfoKey
==
name
)
return
true
;
return
true
;
if
(
PropertyMapper
.
IsEqual
(
name
,
pocoMember
.
PocoColumn
.
ColumnAlias
??
pocoMember
.
PocoColumn
.
ColumnName
))
if
(
PropertyMapper
.
IsEqual
(
name
,
pocoMember
.
PocoColumn
.
ColumnAlias
??
pocoMember
.
PocoColumn
.
ColumnName
,
pocoMember
.
PocoColumn
.
ExactColumnNameMatch
))
return
true
;
return
true
;
return
PropertyMapper
.
IsEqual
(
name
,
pocoMember
.
Name
);
return
PropertyMapper
.
IsEqual
(
name
,
pocoMember
.
Name
,
pocoMember
.
PocoColumn
.
ExactColumnNameMatch
);
}
}
private
static
IEnumerable
<
PocoMemberLevel
>
FlattenPocoMembers
(
List
<
PocoMember
>
pocoMembers
,
int
levelMonitor
=
1
)
private
static
IEnumerable
<
PocoMemberLevel
>
FlattenPocoMembers
(
List
<
PocoMember
>
pocoMembers
,
int
levelMonitor
=
1
)
...
...
test/NPoco.Tests/NewMapper/NewMapperTests.cs
浏览文件 @
33be5b84
...
@@ -745,6 +745,23 @@ public class Result36
...
@@ -745,6 +745,23 @@ public class Result36
public
string
GetData
()
=>
Data
;
public
string
GetData
()
=>
Data
;
public
string
GetData1
()
=>
Data1
;
public
string
GetData1
()
=>
Data1
;
}
}
[
Test
]
public
void
ExactMatchTests
()
{
var
result
=
Database
.
Single
<
ExactMatchTestsDto
>(
"select 'Test' MyColumn, 'Test2' My_Column /*poco_dual*/"
);
Assert
.
AreEqual
(
"Test"
,
result
.
MyColumn
);
Assert
.
AreEqual
(
"Test2"
,
result
.
My_Column
);
}
public
class
ExactMatchTestsDto
{
[
Column
(
ExactNameMatch
=
true
)]
public
string
MyColumn
{
get
;
set
;
}
[
Column
(
ExactNameMatch
=
true
)]
public
string
My_Column
{
get
;
set
;
}
}
}
}
public
class
NoPrimaryKey
public
class
NoPrimaryKey
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录