Browse Source

Handle GUID type before Change Type.

pull/5451/head
maliming 6 years ago
parent
commit
21759b39f2
  1. 10
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  2. 12
      framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs
  3. 2
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs
  4. 5
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs
  5. 3
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs
  6. 5
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs

10
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);
}
}
}
}

12
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<TSource>(
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);
}
}
}
}

2
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<string>("PhoneCode").ShouldBe("123456");
london2.GetProperty<int>("Rank").ShouldBe(88);
london2.GetProperty<string>("ZipCode").ShouldBe(null);
london2.GetProperty<Guid>("Guid").ShouldBe(new Guid("a7ae2efe-d8d6-466b-92e3-da14aa6e1c5b"));
}

5
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<City, int>(
"Rank"
).MapEfCoreProperty<City, Guid>(
"Guid"
);
});
}

3
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);

5
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<bool>("IsHot").ShouldBeFalse();
city.GetProperty<bool>("IsHot", true).ShouldBeTrue();
city.SetProperty("Guid", "2260AFEC-BBFD-42D4-A91A-DCB11E09B17F");
city.GetProperty<Guid>("Guid").ShouldBe(new Guid("2260AFEC-BBFD-42D4-A91A-DCB11E09B17F"));
}
}
}
}

Loading…
Cancel
Save