From c771ea7786e442f3daac11ee9d3f625720c59d11 Mon Sep 17 00:00:00 2001 From: 丁松杰 <377973147@qq.com> Date: Mon, 17 Feb 2020 15:21:02 +0800 Subject: [PATCH] 添加 orleans entityframework 集成测试 --- samples/apis/Product.Api/Controllers/ProductTypeController.cs | 2 +- samples/apis/Product.Api/Grains/ProductTypeGrain.cs | 4 +++- samples/apis/Product.Api/Infrastructure/EntityConfigurations/ProductTypeEntityConfiguration.cs | 1 + src/Pole.Core/Domain/Entity.cs | 2 ++ src/Pole.Core/Grains/PoleGrain.cs | 21 +++++++++++++++++++++ src/Pole.Orleans.Provider.EntityframeworkCore/Conventions/GrainStorageConventionOptions.cs | 2 +- 6 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 src/Pole.Core/Grains/PoleGrain.cs diff --git a/samples/apis/Product.Api/Controllers/ProductTypeController.cs b/samples/apis/Product.Api/Controllers/ProductTypeController.cs index 699593a..2c915db 100644 --- a/samples/apis/Product.Api/Controllers/ProductTypeController.cs +++ b/samples/apis/Product.Api/Controllers/ProductTypeController.cs @@ -21,7 +21,7 @@ namespace Product.Api.Controllers [HttpGet("AddProductType")] public void AddProductType(string name = "test") { - var newId = Guid.NewGuid().ToString("N").ToLower(); + var newId = "da8a489fa7b4409294ee1b358fbbfba5"; var grain = clusterClient.GetGrain(newId); grain.AddProductType(newId, name); } diff --git a/samples/apis/Product.Api/Grains/ProductTypeGrain.cs b/samples/apis/Product.Api/Grains/ProductTypeGrain.cs index fc7ac18..19f8d17 100644 --- a/samples/apis/Product.Api/Grains/ProductTypeGrain.cs +++ b/samples/apis/Product.Api/Grains/ProductTypeGrain.cs @@ -1,4 +1,5 @@ using Orleans; +using Pole.Core.Grains; using Product.Api.Domain.AggregatesModel.ProductTypeAggregate; using Product.Api.Grains.Abstraction; using System; @@ -8,7 +9,7 @@ using System.Threading.Tasks; namespace Product.Api.Grains { - public class ProductTypeGrain : Grain, IProductTypeGrain + public class ProductTypePoleGrainGrain : PoleGrain, IProductTypeGrain { public async Task AddProductType(string id, string name) { @@ -20,6 +21,7 @@ namespace Product.Api.Grains Name = name }; State = productType; + Add(productType); await WriteStateAsync(); return true; } diff --git a/samples/apis/Product.Api/Infrastructure/EntityConfigurations/ProductTypeEntityConfiguration.cs b/samples/apis/Product.Api/Infrastructure/EntityConfigurations/ProductTypeEntityConfiguration.cs index c85b8bd..91a7088 100644 --- a/samples/apis/Product.Api/Infrastructure/EntityConfigurations/ProductTypeEntityConfiguration.cs +++ b/samples/apis/Product.Api/Infrastructure/EntityConfigurations/ProductTypeEntityConfiguration.cs @@ -18,6 +18,7 @@ namespace Product.Api.Infrastructure.EntityConfigurations builder.Property(m => m.Name).HasMaxLength(256).IsRequired(); builder.Ignore(m => m.DomainEvents); + builder.Ignore(m => m.IsPersisted); builder.HasKey(m => m.Id); } diff --git a/src/Pole.Core/Domain/Entity.cs b/src/Pole.Core/Domain/Entity.cs index f57c527..2a7e1fd 100644 --- a/src/Pole.Core/Domain/Entity.cs +++ b/src/Pole.Core/Domain/Entity.cs @@ -20,6 +20,8 @@ namespace Pole.Core.Domain } } public List DomainEvents { get; private set; } + + public bool IsPersisted { get; set; } public bool IsTransient() { return string.IsNullOrEmpty(this._id); diff --git a/src/Pole.Core/Grains/PoleGrain.cs b/src/Pole.Core/Grains/PoleGrain.cs new file mode 100644 index 0000000..0fc0348 --- /dev/null +++ b/src/Pole.Core/Grains/PoleGrain.cs @@ -0,0 +1,21 @@ +using Orleans; +using Pole.Core.Domain; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Pole.Core.Grains +{ + public abstract class PoleGrain : Grain, IGrainWithStringKey + where TAggregateRoot : Entity, IAggregateRoot, new() + { + public void Update(TAggregateRoot aggregateRoot) + { + aggregateRoot.IsPersisted = true; + } + public void Add(TAggregateRoot aggregateRoot) + { + aggregateRoot.IsPersisted = false; + } + } +} diff --git a/src/Pole.Orleans.Provider.EntityframeworkCore/Conventions/GrainStorageConventionOptions.cs b/src/Pole.Orleans.Provider.EntityframeworkCore/Conventions/GrainStorageConventionOptions.cs index 7d1aead..08f7288 100644 --- a/src/Pole.Orleans.Provider.EntityframeworkCore/Conventions/GrainStorageConventionOptions.cs +++ b/src/Pole.Orleans.Provider.EntityframeworkCore/Conventions/GrainStorageConventionOptions.cs @@ -10,6 +10,6 @@ namespace Pole.Orleans.Provider.EntityframeworkCore.Conventions public string DefaultGrainKeyExtPropertyName { get; set; } = "KeyExt"; - public string DefaultPersistenceCheckPropertyName { get; set; } = "Id"; + public string DefaultPersistenceCheckPropertyName { get; set; } = "IsPersisted"; } } -- libgit2 0.25.0