diff --git a/src/YesSql.Abstractions/Entites/IVersionable.cs b/src/YesSql.Abstractions/Entites/IVersionable.cs new file mode 100644 index 00000000..95edf487 --- /dev/null +++ b/src/YesSql.Abstractions/Entites/IVersionable.cs @@ -0,0 +1,10 @@ +using System.Text.Json.Serialization; + +namespace YesSql.Entites +{ + public interface IVersionable + { + [JsonIgnore] + long Version { get; set; } + } +} diff --git a/src/YesSql.Core/Session.cs b/src/YesSql.Core/Session.cs index a3647505..86118be6 100644 --- a/src/YesSql.Core/Session.cs +++ b/src/YesSql.Core/Session.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using YesSql.Commands; using YesSql.Data; +using YesSql.Entites; using YesSql.Indexes; using YesSql.Services; @@ -569,6 +570,11 @@ public IEnumerable Get(IList documents, string collection) where accessor = defaultAccessor; } + if (item is IVersionable versionedEntity) + { + versionedEntity.Version = d.Version; + } + accessor?.Set(item, d.Id); if (_withTracking) diff --git a/test/YesSql.Tests/CoreTests.cs b/test/YesSql.Tests/CoreTests.cs index 6e097749..af40ffac 100644 --- a/test/YesSql.Tests/CoreTests.cs +++ b/test/YesSql.Tests/CoreTests.cs @@ -717,6 +717,25 @@ public async Task ShouldQueryNullVariables() } } + [Fact] + public async Task ShouldAccessVersion() + { + _store.RegisterIndexes(); + + await using (var session = _store.CreateSession()) + { + var article = new Article { Title = TestConstants.Strings.SomeString, PublishedUtc = new DateTime(2011, 11, 1) }; + await session.SaveAsync(article); + await session.SaveChangesAsync(); + Assert.Equal(1, article.Version); + + article.Title = "Version2"; + await session.SaveAsync(article); + await session.SaveChangesAsync(); + Assert.Equal(2, article.Version); + } + } + [Fact] public async Task ShouldCompareWithConstants() { diff --git a/test/YesSql.Tests/Models/Article.cs b/test/YesSql.Tests/Models/Article.cs index f75fbefa..7c2eee44 100644 --- a/test/YesSql.Tests/Models/Article.cs +++ b/test/YesSql.Tests/Models/Article.cs @@ -1,12 +1,14 @@ using System; +using YesSql.Entites; namespace YesSql.Tests.Models { - public class Article + public class Article : IVersionable { public int Id { get; set; } public string Title { get; set; } public DateTime PublishedUtc { get; set; } public bool IsPublished { get; set; } + public long Version { get; set; } = 0; } } \ No newline at end of file