Skip to content

Commit 60edbe0

Browse files
authored
Merge pull request #30 from koenbeuk/issue/capture-unmodified
Issue capture unmodified
2 parents 66cb8f5 + 6362056 commit 60edbe0

File tree

3 files changed

+68
-21
lines changed

3 files changed

+68
-21
lines changed

src/EntityFrameworkCore.Triggered/TriggerContext.cs

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,23 @@ public class TriggerContext<TEntity> : ITriggerContext<TEntity>
1212
where TEntity: class
1313
{
1414
readonly ChangeType _type;
15-
readonly EntityEntry _entityEntry;
16-
readonly Lazy<TEntity?> _unmodifiedEntityLazy;
17-
18-
TEntity? CreateUnmodified()
19-
{
20-
if (ChangeType == ChangeType.Added)
21-
{
22-
return null;
23-
}
24-
else
25-
{
26-
return (TEntity)_entityEntry.OriginalValues.ToObject();
27-
}
28-
}
15+
readonly TEntity _entity;
16+
readonly TEntity? _unmodifiedEntity;
2917

3018

3119
public TriggerContext(EntityEntry entityEntry, ChangeType changeType)
3220
{
3321
_type = changeType;
34-
_entityEntry = entityEntry;
35-
_unmodifiedEntityLazy = new Lazy<TEntity?>(CreateUnmodified, false);
22+
_entity = (TEntity)entityEntry.Entity;
23+
24+
if (changeType != ChangeType.Added)
25+
{
26+
_unmodifiedEntity = (TEntity)entityEntry.OriginalValues.ToObject();
27+
}
3628
}
3729

3830
public ChangeType ChangeType => _type;
39-
public TEntity Entity => (TEntity)_entityEntry.Entity;
40-
public TEntity? UnmodifiedEntity => _unmodifiedEntityLazy.Value;
31+
public TEntity Entity => _entity;
32+
public TEntity? UnmodifiedEntity => _unmodifiedEntity;
4133
}
4234
}

test/EntityFrameworkCore.Triggered.Tests/Internal/TriggerContextFactoryTests.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,40 @@
44
using System.Text;
55
using System.Threading.Tasks;
66
using EntityFrameworkCore.Triggered.Internal;
7+
using Microsoft.EntityFrameworkCore;
78
using Xunit;
89

910
namespace EntityFrameworkCore.Triggered.Tests.Internal
1011
{
1112
public class TriggerContextFactoryTests
1213
{
14+
class TestModel
15+
{
16+
public Guid Id { get; set; }
17+
public string Name { get; set; }
18+
}
19+
20+
class TestDbContext : DbContext
21+
{
22+
public DbSet<TestModel> TestModels { get; set; }
23+
24+
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
25+
{
26+
base.OnConfiguring(optionsBuilder);
27+
28+
optionsBuilder.UseInMemoryDatabase(nameof(TriggerContextFactoryTests));
29+
}
30+
}
31+
1332
[Fact]
1433
public void Activate_ReturnsInstance()
1534
{
16-
var result = TriggerContextFactory<object>.Activate(null, ChangeType.Added);
35+
using var dbContext = new TestDbContext();
36+
var entityEntry = dbContext.Entry(new TestModel { });
37+
38+
var result = TriggerContextFactory<object>.Activate(entityEntry, ChangeType.Added);
1739

1840
Assert.NotNull(result);
1941
}
20-
2142
}
2243
}

test/EntityFrameworkCore.Triggered.Tests/TriggerContextTests.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace EntityFrameworkCore.Triggered.Tests.Internal
1111
{
1212
public class TriggerContextTests
1313
{
14-
class TestModel { public int Id { get; set; } }
14+
class TestModel { public int Id { get; set; } public string Name { get; set; } }
1515

1616
class TestDbContext : DbContext
1717
{
@@ -53,6 +53,40 @@ public void UnmodifiedEntity_WhenTypeModified_IsNotEmpty()
5353
Assert.NotNull(subject.UnmodifiedEntity);
5454
}
5555

56+
[Fact]
57+
public void UnmodifiedEntity_WhenTypeModified_HoldsUnmodifiedStateBeforeSaveChanges()
58+
{
59+
using var dbContext = new TestDbContext();
60+
var sample1 = new TestModel { Name = "test1" };
61+
dbContext.Add(sample1);
62+
dbContext.SaveChanges();
63+
64+
var subject = new TriggerContext<TestModel>(dbContext.Entry(sample1), ChangeType.Modified);
65+
sample1.Name = "test2";
66+
67+
Assert.NotNull(subject.UnmodifiedEntity);
68+
Assert.Equal("test1", subject.UnmodifiedEntity.Name);
69+
70+
dbContext.SaveChanges();
71+
}
72+
73+
[Fact]
74+
public void UnmodifiedEntity_WhenTypeModified_HoldsUnmodifiedStateAfterSaveChanges()
75+
{
76+
using var dbContext = new TestDbContext();
77+
var sample1 = new TestModel { Name = "test1" };
78+
dbContext.Add(sample1);
79+
dbContext.SaveChanges();
80+
81+
var subject = new TriggerContext<TestModel>(dbContext.Entry(sample1), ChangeType.Modified);
82+
sample1.Name = "test2";
83+
84+
dbContext.SaveChanges();
85+
86+
Assert.NotNull(subject.UnmodifiedEntity);
87+
Assert.Equal("test1", subject.UnmodifiedEntity.Name);
88+
}
89+
5690
[Fact]
5791
public void Entity_IsNeverEmpty()
5892
{

0 commit comments

Comments
 (0)