Browse Source

Support multiple usages

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

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

@ -163,8 +163,12 @@ namespace Volo.Abp.ObjectExtending
return;
}
var efCoreEntityMapping = objectExtension.GetEfCoreEntityMappingOrNull();
efCoreEntityMapping?.EntityTypeBuildAction?.Invoke(typeBuilder);
var efCoreEntityMappings = objectExtension.GetEfCoreEntityMappings();
foreach (var efCoreEntityMapping in efCoreEntityMappings)
{
efCoreEntityMapping?.EntityTypeBuildAction?.Invoke(typeBuilder);
}
foreach (var property in objectExtension.GetProperties())
{
@ -203,9 +207,12 @@ namespace Volo.Abp.ObjectExtending
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 =>
{
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 =>
{
@ -52,6 +57,11 @@ namespace Volo.Abp.EntityFrameworkCore.Domain
{
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);
modelBuilder.TryConfigureObjectExtensions<TestAppDbContext>();
modelBuilder.Entity<Phone>(b =>
{
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});
});
});
modelBuilder.TryConfigureObjectExtensions<TestAppDbContext>();
}
}
}

Loading…
Cancel
Save