Skip to content

Commit a59634a

Browse files
author
Michael Ganss
committed
Defer changes to satisfy unique constraints (fixes #128)
1 parent ad7155e commit a59634a

File tree

5 files changed

+217
-104
lines changed

5 files changed

+217
-104
lines changed

SyncChanges.Tests/Tests.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ Name nvarchar(200) null,
7272
DateOfBirth datetime null,
7373
Savings decimal null
7474
)");
75+
db.Execute(@"alter table Users add constraint Users_Name_Age_UQ unique (Name, Age)");
7576
db.Execute(@"alter table Users
7677
enable CHANGE_TRACKING
7778
with (TRACK_COLUMNS_UPDATED = OFF)");
@@ -462,6 +463,53 @@ public void IntermediateTest()
462463
}
463464
}
464465

466+
[Test]
467+
public void UniqueTest()
468+
{
469+
try
470+
{
471+
CreateUsersTable();
472+
473+
var sourceUser = new User { Name = "Michael Jordan", Age = 54, DateOfBirth = new DateTime(1963, 2, 17), Savings = 1.31m * 1e9m };
474+
var sourceUser2 = new User { Name = "Michael Jordan", Age = 55, DateOfBirth = new DateTime(1963, 2, 17), Savings = 1.31m * 1e9m };
475+
476+
using (var db = GetDatabase(SourceDatabaseName))
477+
{
478+
db.Insert(sourceUser);
479+
}
480+
481+
var synchronizer = new Synchronizer(TestConfig);
482+
var success = synchronizer.Sync();
483+
484+
Assert.That(success, Is.True);
485+
486+
using (var db = GetDatabase(SourceDatabaseName))
487+
{
488+
db.Insert(sourceUser2);
489+
sourceUser.Age = 56;
490+
db.Update(sourceUser);
491+
sourceUser2.Age = 54;
492+
db.Update(sourceUser2);
493+
}
494+
495+
success = synchronizer.Sync();
496+
497+
Assert.That(success, Is.True);
498+
499+
using (var db = GetDatabase(DestinationDatabaseName))
500+
{
501+
var users = db.Fetch<User>("select * from Users");
502+
Assert.That(users.Count, Is.EqualTo(2));
503+
Assert.That(users[0].Age, Is.EqualTo(56));
504+
Assert.That(users[1].Age, Is.EqualTo(54));
505+
}
506+
}
507+
finally
508+
{
509+
DropTable("Users");
510+
}
511+
}
512+
465513
[Test]
466514
public void NullConfigTest()
467515
{

SyncChanges/SyncChanges.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<EmbedUntrackedSources>true</EmbedUntrackedSources>
2323
<IncludeSymbols>true</IncludeSymbols>
2424
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
25+
<LangVersion>latest</LangVersion>
2526
</PropertyGroup>
2627
<ItemGroup>
2728
<PackageReference Include="Humanizer.Core" Version="2.14.1" />

0 commit comments

Comments
 (0)