diff --git a/src/NPoco.Abstractions/Snapshotter.cs b/src/NPoco.Abstractions/Snapshotter.cs index bced4927..73ce4350 100644 --- a/src/NPoco.Abstractions/Snapshotter.cs +++ b/src/NPoco.Abstractions/Snapshotter.cs @@ -83,6 +83,19 @@ public List Changes() return list; } + public bool HasChanges() + { + foreach (var pocoColumn in _originalValues) + { + var newValue = pocoColumn.Key.GetColumnValue(_pocoData, _trackedObject); + if (!AreEqual(pocoColumn.Value, newValue)) + { + return true; + } + } + return false; + } + private bool AreEqual(object first, object second) { if (first == null && second == null) return true; diff --git a/test/NPoco.Tests/SnapshotterTests.cs b/test/NPoco.Tests/SnapshotterTests.cs index a31bf657..ce984293 100644 --- a/test/NPoco.Tests/SnapshotterTests.cs +++ b/test/NPoco.Tests/SnapshotterTests.cs @@ -1,7 +1,6 @@ using System; using Microsoft.Data.SqlClient; using System.Linq; -using NPoco; using NPoco.FluentMappings; using NPoco.Tests.Common; using NUnit.Framework; @@ -148,6 +147,32 @@ public void GetDiffIncludingLists() Assert.AreEqual(1, snap.UpdatedColumns().Count); Assert.AreEqual("Values", snap.UpdatedColumns()[0]); } + + [Test] + public void HasChangesShouldReturnFalseWhenNoChanges() + { + var user = new Admin { UserId = 1 }; + var snap = _database.StartSnapshot(user); + Assert.False(snap.HasChanges()); + } + + [Test] + public void HasChangesShouldReturnTrueWhenPropertyChanged() + { + var user = new Admin { UserId = 1, Age = 30 }; + var snap = _database.StartSnapshot(user); + user.Age = 31; + Assert.True(snap.HasChanges()); + } + + [Test] + public void HasChangesShouldMatchChangesCountBehavior() + { + var user = new Admin { UserId = 1, Age = 30 }; + var snap = _database.StartSnapshot(user); + user.Age = 31; + Assert.AreEqual(snap.Changes().Any(), snap.HasChanges()); + } } public class SnapshotOnClass