Browse Source

Support multiple usages

pull/8898/head
liangshiwei 6 years ago
parent
commit
3345e2e7bd
  1. 50
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionInfoExtensions.cs
  2. 15
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs
  3. 12
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/TestEntityExtensionConfigurator.cs
  4. 4
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs

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

@ -1,4 +1,6 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Metadata.Builders;
@ -82,10 +84,19 @@ namespace Volo.Abp.ObjectExtending
{ {
Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo));
objectExtensionInfo.Configuration[EfCoreEntityConfigurationName] = var mappingOptionList = new List<ObjectExtensionInfoEfCoreMappingOptions>
{
new ObjectExtensionInfoEfCoreMappingOptions( new ObjectExtensionInfoEfCoreMappingOptions(
objectExtensionInfo, objectExtensionInfo,
entityTypeBuildAction); entityTypeBuildAction)
};
objectExtensionInfo.Configuration.AddOrUpdate(EfCoreEntityConfigurationName, mappingOptionList,
(k, v) =>
{
v.As<List<ObjectExtensionInfoEfCoreMappingOptions>>().Add(mappingOptionList.First());
return v;
});
return objectExtensionInfo; return objectExtensionInfo;
} }
@ -96,40 +107,39 @@ namespace Volo.Abp.ObjectExtending
{ {
Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo));
objectExtensionInfo.Configuration[EfCoreDbContextConfigurationName] = var mappingOptionList = new List<ObjectExtensionInfoEfCoreMappingOptions>
{
new ObjectExtensionInfoEfCoreMappingOptions( new ObjectExtensionInfoEfCoreMappingOptions(
objectExtensionInfo, objectExtensionInfo,
modelBuildAction); modelBuildAction)
};
objectExtensionInfo.Configuration.AddOrUpdate(EfCoreDbContextConfigurationName, mappingOptionList,
(k, v) =>
{
v.As<List<ObjectExtensionInfoEfCoreMappingOptions>>().Add(mappingOptionList.First());
return v;
});
return objectExtensionInfo; return objectExtensionInfo;
} }
[CanBeNull] public static List<ObjectExtensionInfoEfCoreMappingOptions> GetEfCoreEntityMappings(
public static ObjectExtensionInfoEfCoreMappingOptions GetEfCoreEntityMappingOrNull(
[NotNull] this ObjectExtensionInfo objectExtensionInfo) [NotNull] this ObjectExtensionInfo objectExtensionInfo)
{ {
Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo));
if (!objectExtensionInfo.Configuration.TryGetValue(EfCoreEntityConfigurationName, out var options)) return !objectExtensionInfo.Configuration.TryGetValue(EfCoreEntityConfigurationName, out var options) ?
{ new List<ObjectExtensionInfoEfCoreMappingOptions>() : options.As<List<ObjectExtensionInfoEfCoreMappingOptions>>();
return null;
}
return options as ObjectExtensionInfoEfCoreMappingOptions;
} }
[CanBeNull] public static List<ObjectExtensionInfoEfCoreMappingOptions> GetEfCoreDbContextMappings(
public static ObjectExtensionInfoEfCoreMappingOptions GetEfCoreDbContextMappingOrNull(
[NotNull] this ObjectExtensionInfo objectExtensionInfo) [NotNull] this ObjectExtensionInfo objectExtensionInfo)
{ {
Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo)); Check.NotNull(objectExtensionInfo, nameof(objectExtensionInfo));
if (!objectExtensionInfo.Configuration.TryGetValue(EfCoreDbContextConfigurationName, out var options)) return !objectExtensionInfo.Configuration.TryGetValue(EfCoreDbContextConfigurationName, out var options) ?
{ new List<ObjectExtensionInfoEfCoreMappingOptions>() : options.As<List<ObjectExtensionInfoEfCoreMappingOptions>>();
return null;
}
return options as ObjectExtensionInfoEfCoreMappingOptions;
} }
} }
} }

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

@ -163,8 +163,12 @@ namespace Volo.Abp.ObjectExtending
return; return;
} }
var efCoreEntityMapping = objectExtension.GetEfCoreEntityMappingOrNull(); var efCoreEntityMappings = objectExtension.GetEfCoreEntityMappings();
efCoreEntityMapping?.EntityTypeBuildAction?.Invoke(typeBuilder);
foreach (var efCoreEntityMapping in efCoreEntityMappings)
{
efCoreEntityMapping?.EntityTypeBuildAction?.Invoke(typeBuilder);
}
foreach (var property in objectExtension.GetProperties()) foreach (var property in objectExtension.GetProperties())
{ {
@ -203,9 +207,12 @@ namespace Volo.Abp.ObjectExtending
return; return;
} }
var efCoreDbContextMapping = objectExtension.GetEfCoreDbContextMappingOrNull(); var efCoreDbContextMappings = objectExtension.GetEfCoreDbContextMappings();
efCoreDbContextMapping?.ModelBuildAction?.Invoke(modelBuilder); foreach (var efCoreDbContextMapping in efCoreDbContextMappings)
{
efCoreDbContextMapping?.ModelBuildAction?.Invoke(modelBuilder);
}
} }
} }
} }

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

@ -40,7 +40,12 @@ namespace Volo.Abp.EntityFrameworkCore.Domain
).MapEfCoreEntity<City>(b => ).MapEfCoreEntity<City>(b =>
{ {
b.As<EntityTypeBuilder<City>>() b.As<EntityTypeBuilder<City>>()
.Property(x=>x.Name).IsRequired().HasMaxLength(200); .Property(x=>x.Name).IsRequired();
}).MapEfCoreEntity<City>(b =>
{
b.As<EntityTypeBuilder<City>>()
.Property(x=>x.Name).HasMaxLength(200);
}).MapEfCoreEntity(typeof(Person), b => }).MapEfCoreEntity(typeof(Person), b =>
{ {
@ -52,6 +57,11 @@ namespace Volo.Abp.EntityFrameworkCore.Domain
{ {
b.Entity<City>().Property(x => x.Name).IsRequired(); b.Entity<City>().Property(x => x.Name).IsRequired();
}); });
ObjectExtensionManager.Instance.MapEfCoreDbContext<TestAppDbContext>(b =>
{
b.Entity<Author>().Property(x => x.Name).IsRequired();
});
}); });
} }
} }

4
framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs

@ -32,8 +32,6 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore
base.OnModelCreating(modelBuilder); base.OnModelCreating(modelBuilder);
modelBuilder.TryConfigureObjectExtensions<TestAppDbContext>();
modelBuilder.Entity<Phone>(b => modelBuilder.Entity<Phone>(b =>
{ {
b.HasKey(p => new {p.PersonId, p.Number}); b.HasKey(p => new {p.PersonId, p.Number});
@ -54,6 +52,8 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore
d.HasKey(x => new {x.CityId, x.Name}); d.HasKey(x => new {x.CityId, x.Name});
}); });
}); });
modelBuilder.TryConfigureObjectExtensions<TestAppDbContext>();
} }
} }
} }

Loading…
Cancel
Save