Skip to content

Commit 19564ad

Browse files
author
Craig Maslowski
committed
Added a better fix for issue 108 which also takes adds and deletes into account.
modified: SharpRepository.Repository/RepositoryBase.Batch.cs modified: SharpRepository.Repository/RepositoryBase.cs
1 parent a22b977 commit 19564ad

2 files changed

Lines changed: 34 additions & 12 deletions

File tree

SharpRepository.Repository/RepositoryBase.Batch.cs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@ public void Delete(IEnumerable<T> entities)
7575

7676
public void Commit()
7777
{
78-
var updatedItems = new List<T>();
79-
8078
_repository.BatchMode = true;
8179

8280
foreach (var batchItem in _items)
@@ -89,8 +87,7 @@ public void Commit()
8987

9088
case BatchAction.Update:
9189
_repository.Update(batchItem.Item);
92-
updatedItems.Add(batchItem.Item);
93-
break;
90+
break;
9491

9592
case BatchAction.Delete:
9693
_repository.Delete(batchItem.Item);
@@ -100,9 +97,24 @@ public void Commit()
10097

10198
_repository.Save();
10299

103-
foreach (var item in updatedItems)
100+
// call QueryManager.OnItem{action} for each item in the batch only after saving the whole batch
101+
foreach (var batchItem in _items)
104102
{
105-
_repository.NotifyQueryManagerOfUpdatedEntity(item);
103+
switch (batchItem.Action)
104+
{
105+
case BatchAction.Add:
106+
_repository.NotifyQueryManagerOfAddedEntity(batchItem.Item);
107+
break;
108+
109+
case BatchAction.Update:
110+
_repository.NotifyQueryManagerOfUpdatedEntity(batchItem.Item);
111+
break;
112+
113+
case BatchAction.Delete:
114+
_repository.NotifyQueryManagerOfDeletedEntity(batchItem.Item);
115+
break;
116+
}
117+
106118
}
107119
_repository.BatchMode = false;
108120
_items.Clear();

SharpRepository.Repository/RepositoryBase.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,11 +1152,16 @@ private void ProcessAdd(T entity, bool batchMode)
11521152

11531153
Save();
11541154

1155-
TKey key;
1156-
if (GetPrimaryKey(entity, out key))
1157-
QueryManager.OnItemAdded(key, entity);
1155+
NotifyQueryManagerOfAddedEntity();
11581156
}
11591157

1158+
private void NotifyQueryManagerOfAddedEntity(T entity)
1159+
{
1160+
TKey key;
1161+
if (GetPrimaryKey(entity, out key))
1162+
QueryManager.OnItemAdded(key, entity);
1163+
}
1164+
11601165
public void Add(IEnumerable<T> entities)
11611166
{
11621167
try
@@ -1206,11 +1211,16 @@ private void ProcessDelete(T entity, bool batchMode)
12061211

12071212
Save();
12081213

1209-
TKey key;
1210-
if (GetPrimaryKey(entity, out key))
1211-
QueryManager.OnItemDeleted(key, entity);
1214+
NotifyQueryManagerOfDeletedEntity(entity);
12121215
}
12131216

1217+
private void NotifyQueryManagerOfDeletedEntity(T entity)
1218+
{
1219+
TKey key;
1220+
if (GetPrimaryKey(entity, out key))
1221+
QueryManager.OnItemDeleted(key, entity);
1222+
}
1223+
12141224
public void Delete(IEnumerable<T> entities)
12151225
{
12161226
foreach (var entity in entities)

0 commit comments

Comments
 (0)