From 6697958e79f93f698259734d9e99e95c12312aeb Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Thu, 30 Jul 2020 14:52:59 +0800 Subject: [PATCH] Convert entity property to entry property type. Fix #4917 --- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 4 +++- .../Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs | 6 ++++-- .../Domain/TestEntityExtensionConfigurator.cs | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index adfb530ce2..178bab27a9 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -314,7 +314,9 @@ namespace Volo.Abp.EntityFrameworkCore continue; } - entry.Property(property.Name).CurrentValue = entity.GetProperty(property.Name); + var entryProperty = entry.Property(property.Name); + var entityProperty = entity.GetProperty(property.Name); + entryProperty.CurrentValue = Convert.ChangeType(entityProperty, entryProperty.Metadata.ClrType); } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs index 557116d158..1f68a29514 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs @@ -22,11 +22,13 @@ namespace Volo.Abp.EntityFrameworkCore.Domain var london = await CityRepository.FindByNameAsync("London"); london.GetProperty("PhoneCode").ShouldBe("42"); - london.ExtraProperties["PhoneCode"] = "53"; + london.ExtraProperties["PhoneCode"] = 123456; + london.ExtraProperties["Rank"] = "88"; await CityRepository.UpdateAsync(london); var london2 = await CityRepository.FindByNameAsync("London"); - london2.GetProperty("PhoneCode").ShouldBe("53"); + london2.GetProperty("PhoneCode").ShouldBe("123456"); + london2.GetProperty("Rank").ShouldBe(88); } } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs index 3d415d79e6..7c6f5d9576 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs @@ -16,6 +16,8 @@ namespace Volo.Abp.EntityFrameworkCore.Domain .MapEfCoreProperty( "PhoneCode", p => p.HasMaxLength(8) + ).MapEfCoreProperty( + "Rank" ); }); }