Skip to content

Commit bb711c2

Browse files
committed
Only use reference equality in EntityCollection
See #118 for details
1 parent d57759e commit bb711c2

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

src/MongoFramework/Infrastructure/EntityCollection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public EntityEntry<TEntity> GetEntry(TEntity entity)
2828

2929
foreach (var entry in Entries)
3030
{
31-
if (Equals(entityId, defaultIdValue) && entry.Entity.Equals(entity))
31+
if (Equals(entityId, defaultIdValue) && ReferenceEquals(entry.Entity, entity))
3232
{
3333
return entry;
3434
}
@@ -55,7 +55,7 @@ public void Update(TEntity entity, EntityEntryState state)
5555
var entry = GetEntry(entity);
5656
if (entry != null)
5757
{
58-
if (entry.Entity.Equals(entity))
58+
if (ReferenceEquals(entry.Entity, entity))
5959
{
6060
entry.State = state;
6161
}

tests/MongoFramework.Tests/Infrastructure/EntityCollectionTests.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,28 @@ public class EntityCollectionModel
1414
public string Title { get; set; }
1515
}
1616

17+
public class EntityCollectionOverriddenEqualsModel
18+
{
19+
public string Id { get; set; }
20+
21+
public string EqualsProperty { get; set; }
22+
23+
public override bool Equals(object obj)
24+
{
25+
if (obj is EntityCollectionOverriddenEqualsModel model)
26+
{
27+
return EqualsProperty == model.EqualsProperty;
28+
}
29+
30+
return false;
31+
}
32+
33+
public override int GetHashCode()
34+
{
35+
return EqualsProperty?.GetHashCode() ?? base.GetHashCode();
36+
}
37+
}
38+
1739
[TestMethod]
1840
public void AddNewEntry()
1941
{
@@ -65,6 +87,24 @@ public void UpdateExistingEntryInstanceMatch()
6587
Assert.IsTrue(entityCollection.GetEntries().All(e => e.Entity == entity && e.State == EntityEntryState.NoChanges));
6688
}
6789

90+
[TestMethod]
91+
public void EntryDoesntMatchOnEqualityOverride()
92+
{
93+
var entityCollection = new EntityCollection<EntityCollectionOverriddenEqualsModel>();
94+
var entityA = new EntityCollectionOverriddenEqualsModel
95+
{
96+
EqualsProperty = "DbEntityCollectionTests.EntityCollectionOverriddenEqualsModel"
97+
};
98+
entityCollection.Update(entityA, EntityEntryState.Added);
99+
100+
var entityB = new EntityCollectionOverriddenEqualsModel
101+
{
102+
EqualsProperty = "DbEntityCollectionTests.EntityCollectionOverriddenEqualsModel"
103+
};
104+
entityCollection.Update(entityB, EntityEntryState.Added);
105+
Assert.AreEqual(2, entityCollection.GetEntries().Count());
106+
}
107+
68108
[TestMethod]
69109
public void RemoveRange()
70110
{

0 commit comments

Comments
 (0)