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 c82912f0f1..207ab759d0 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.ComponentModel.DataAnnotations.Schema; using System.Globalization; using System.Linq; @@ -339,7 +340,14 @@ namespace Volo.Abp.EntityFrameworkCore { if (TypeHelper.IsPrimitiveExtended(entryProperty.Metadata.ClrType, includeEnums: true)) { - entryProperty.CurrentValue = Convert.ChangeType(entityProperty, entryProperty.Metadata.ClrType, CultureInfo.InvariantCulture); + if (entryProperty.Metadata.ClrType == typeof(Guid)) + { + entryProperty.CurrentValue = TypeDescriptor.GetConverter(entryProperty.Metadata.ClrType).ConvertFromInvariantString(entityProperty.ToString()); + } + else + { + entryProperty.CurrentValue = Convert.ChangeType(entityProperty, entryProperty.Metadata.ClrType, CultureInfo.InvariantCulture); + } } } } diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs index 6abb350328..a7cc08a6bd 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Globalization; using Volo.Abp.DynamicProxy; using Volo.Abp.ObjectExtending; @@ -32,6 +33,11 @@ namespace Volo.Abp.Data if (TypeHelper.IsPrimitiveExtended(typeof(TProperty), includeEnums: true)) { + if (typeof(TProperty) == typeof(Guid)) + { + return (TProperty)TypeDescriptor.GetConverter(typeof(TProperty)).ConvertFromInvariantString(value.ToString()); + } + return (TProperty)Convert.ChangeType(value, typeof(TProperty), CultureInfo.InvariantCulture); } @@ -39,8 +45,8 @@ namespace Volo.Abp.Data } public static TSource SetProperty( - this TSource source, - string name, + this TSource source, + string name, object value, bool validate = true) where TSource : IHasExtraProperties @@ -96,4 +102,4 @@ namespace Volo.Abp.Data ((IHasExtraProperties) source).SetDefaultsForExtraProperties(objectType); } } -} \ No newline at end of file +} 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 f8edd1f5f1..ce2bbe0590 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 @@ -29,12 +29,14 @@ namespace Volo.Abp.EntityFrameworkCore.Domain london.ExtraProperties["PhoneCode"] = 123456; london.ExtraProperties["Rank"] = "88"; london.ExtraProperties["ZipCode"] = null; + london.ExtraProperties["Guid"] = "a7ae2efe-d8d6-466b-92e3-da14aa6e1c5b"; await CityRepository.UpdateAsync(london); var london2 = await CityRepository.FindByNameAsync("London"); london2.GetProperty("PhoneCode").ShouldBe("123456"); london2.GetProperty("Rank").ShouldBe(88); london2.GetProperty("ZipCode").ShouldBe(null); + london2.GetProperty("Guid").ShouldBe(new Guid("a7ae2efe-d8d6-466b-92e3-da14aa6e1c5b")); } 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 dd723ffb55..8f81771bc7 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 @@ -1,4 +1,5 @@ -using Volo.Abp.ObjectExtending; +using System; +using Volo.Abp.ObjectExtending; using Volo.Abp.TestApp.Domain; using Volo.Abp.Threading; @@ -24,6 +25,8 @@ namespace Volo.Abp.EntityFrameworkCore.Domain "ZipCode" ).MapEfCoreProperty( "Rank" + ).MapEfCoreProperty( + "Guid" ); }); } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs index 4b5f390d85..36874abad1 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs @@ -52,7 +52,8 @@ namespace Volo.Abp.TestApp { { "Population", 10_470_000 }, { "PhoneCode", "42" }, - { "ZipCode", "1000" } + { "ZipCode", "1000" }, + { "Guid", "a5ed8170-30b9-4580-a395-a3c2dbc031ee" } } }); await _cityRepository.InsertAsync(istanbul); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs index 918e96581b..fba68cc23b 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs @@ -32,6 +32,9 @@ namespace Volo.Abp.TestApp.Testing city.HasProperty("IsHot").ShouldBeFalse(); city.GetProperty("IsHot").ShouldBeFalse(); city.GetProperty("IsHot", true).ShouldBeTrue(); + + city.SetProperty("Guid", "2260AFEC-BBFD-42D4-A91A-DCB11E09B17F"); + city.GetProperty("Guid").ShouldBe(new Guid("2260AFEC-BBFD-42D4-A91A-DCB11E09B17F")); } } -} \ No newline at end of file +}