Skip to content

Commit e61bd7c

Browse files
committed
Fixed problems with Update using objects without keys and schema-qualified tables in InMemoryAdapter
1 parent 0e40b48 commit e61bd7c

File tree

9 files changed

+439
-387
lines changed

9 files changed

+439
-387
lines changed

Simple.Data.Ado/AdoAdapter.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
namespace Simple.Data.Ado
99
{
10+
using Extensions;
11+
1012
[Export("Ado", typeof (Adapter))]
1113
public partial class AdoAdapter : Adapter, ICloneable
1214
{
@@ -81,8 +83,10 @@ public ISchemaProvider SchemaProvider
8183
public override IDictionary<string, object> GetKey(string tableName, IDictionary<string, object> record)
8284
{
8385
var homogenizedRecord = new Dictionary<string, object>(record, HomogenizedEqualityComparer.DefaultInstance);
84-
return GetKeyNames(tableName).ToDictionary(key => key,
85-
key => homogenizedRecord.ContainsKey(key) ? homogenizedRecord[key] : null);
86+
return GetKeyNames(tableName)
87+
.Select(k => k.Homogenize())
88+
.Where(homogenizedRecord.ContainsKey)
89+
.ToDictionary(key => key, key => homogenizedRecord[key]);
8690
}
8791

8892
#region ICloneable Members

Simple.Data.Ado/AdoAdapterUpserter.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,17 @@ public IEnumerable<IDictionary<string, object>> UpsertMany(string tableName, ILi
8282
IDictionary<string, object> result;
8383
try
8484
{
85-
var criteria = ExpressionHelper.CriteriaDictionaryToExpression(tableName,
86-
_adapter.GetKey(tableName, row));
87-
result = Upsert(tableName, row, criteria, isResultRequired);
85+
var key = _adapter.GetKey(tableName, row);
86+
if (key.Count == 0)
87+
{
88+
result = new AdoAdapterInserter(_adapter).Insert(tableName, row, isResultRequired);
89+
}
90+
else
91+
{
92+
var criteria = ExpressionHelper.CriteriaDictionaryToExpression(tableName,
93+
key);
94+
result = Upsert(tableName, row, criteria, isResultRequired);
95+
}
8896
}
8997
catch (Exception ex)
9098
{

0 commit comments

Comments
 (0)