Browse Source

Use EntityTypeBuilder & PropertyBuilder in the MapEfCoreProperty method.

Resolve #4891
pull/4893/head
maliming 6 years ago
parent
commit
7529f9e388
  1. 6
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs
  2. 8
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs
  3. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionPropertyInfoExtensions.cs
  4. 8
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs
  5. 21
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs
  6. 7
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs
  7. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs

6
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs

@ -9,7 +9,7 @@ namespace Volo.Abp.ObjectExtending
public static ObjectExtensionInfo MapEfCoreProperty<TProperty>(
[NotNull] this ObjectExtensionInfo objectExtensionInfo,
[NotNull] string propertyName,
[CanBeNull] Action<PropertyBuilder> propertyBuildAction)
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> propertyBuildAction)
{
return objectExtensionInfo.MapEfCoreProperty(
typeof(TProperty),
@ -22,7 +22,7 @@ namespace Volo.Abp.ObjectExtending
[NotNull] this ObjectExtensionInfo objectExtensionInfo,
[NotNull] Type propertyType,
[NotNull] string propertyName,
[CanBeNull] Action<PropertyBuilder> propertyBuildAction)
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> propertyBuildAction)
{
Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo));
@ -38,4 +38,4 @@ namespace Volo.Abp.ObjectExtending
);
}
}
}
}

8
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs

@ -1,4 +1,4 @@
using System;
using System;
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Volo.Abp.Data;
@ -11,7 +11,7 @@ namespace Volo.Abp.ObjectExtending
public static ObjectExtensionManager MapEfCoreProperty<TEntity, TProperty>(
[NotNull] this ObjectExtensionManager objectExtensionManager,
[NotNull] string propertyName,
[CanBeNull] Action<PropertyBuilder> propertyBuildAction = null)
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> propertyBuildAction = null)
where TEntity : IHasExtraProperties, IEntity
{
return objectExtensionManager.MapEfCoreProperty(
@ -27,7 +27,7 @@ namespace Volo.Abp.ObjectExtending
[NotNull] Type entityType,
[NotNull] Type propertyType,
[NotNull] string propertyName,
[CanBeNull] Action<PropertyBuilder> propertyBuildAction = null)
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> propertyBuildAction = null)
{
Check.NotNull(objectExtensionManager, nameof(objectExtensionManager));
@ -73,7 +73,7 @@ namespace Volo.Abp.ObjectExtending
var propertyBuilder = typeBuilder.Property(property.Type, property.Name);
efCoreMapping.PropertyBuildAction?.Invoke(propertyBuilder);
efCoreMapping.PropertyBuildAction?.Invoke(typeBuilder, propertyBuilder);
}
}
}

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionPropertyInfoExtensions.cs

@ -12,7 +12,7 @@ namespace Volo.Abp.ObjectExtending
[NotNull]
public static ObjectExtensionPropertyInfo MapEfCore(
[NotNull] this ObjectExtensionPropertyInfo propertyExtension,
[CanBeNull] Action<PropertyBuilder> propertyBuildAction = null)
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> propertyBuildAction = null)
{
Check.NotNull(propertyExtension, nameof(propertyExtension));

8
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs

@ -13,15 +13,15 @@ namespace Volo.Abp.ObjectExtending
public ObjectExtensionInfo ObjectExtension => ExtensionProperty.ObjectExtension;
[CanBeNull]
public Action<PropertyBuilder> PropertyBuildAction { get; set; }
public Action<EntityTypeBuilder, PropertyBuilder> PropertyBuildAction { get; set; }
public ObjectExtensionPropertyInfoEfCoreMappingOptions(
[NotNull] ObjectExtensionPropertyInfo extensionProperty,
[CanBeNull] Action<PropertyBuilder> propertyBuildAction = null)
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> propertyBuildAction = null)
{
ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty));
PropertyBuildAction = propertyBuildAction;
}
}
}
}

21
framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs

@ -1,6 +1,10 @@
using System.Threading.Tasks;
using System;
using System.Linq;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Data;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.TestApp.Domain;
using Volo.Abp.TestApp.Testing;
using Xunit;
@ -28,5 +32,20 @@ namespace Volo.Abp.EntityFrameworkCore.Domain
var london2 = await CityRepository.FindByNameAsync("London");
london2.GetProperty<string>("PhoneCode").ShouldBe("53");
}
[Fact]
public async Task An_Extra_Property_Configured_As_Extension2()
{
await WithUnitOfWorkAsync(() =>
{
var entityEntry = CityRepository.GetDbContext().Attach(new City(Guid.NewGuid(), "NewYork"));
var indexes = entityEntry.Metadata.GetIndexes().ToList();
indexes.ShouldNotBeEmpty();
indexes.ShouldContain(x => x.IsUnique);
return Task.CompletedTask;
});
}
}
}

7
framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs

@ -15,8 +15,11 @@ namespace Volo.Abp.EntityFrameworkCore.Domain
ObjectExtensionManager.Instance
.MapEfCoreProperty<City, string>(
"PhoneCode",
p => p.HasMaxLength(8)
);
(e, p) =>
{
e.HasIndex(p.Metadata.Name).IsUnique();
p.HasMaxLength(8);
});
});
}
}

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs

@ -27,7 +27,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore
* ObjectExtensionManager.Instance
* .MapEfCoreProperty<IdentityUser, string>(
* "MyProperty",
* b => b.HasMaxLength(128)
* (e, b) => b.HasMaxLength(128)
* );
*
* See the documentation for more:

Loading…
Cancel
Save