From d736a84ab5698fee873eec2588253fbd2caab3f6 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 26 Dec 2019 15:31:47 +0800 Subject: [PATCH] Cancel value generation for aggregate roots and entities. When they use Guid as the primary key type --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) 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 bcd21149da..87de3f1247 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -67,6 +67,13 @@ namespace Volo.Abp.EntityFrameworkCore BindingFlags.Instance | BindingFlags.NonPublic ); + private static readonly MethodInfo ConfigureValueGeneratedMethodInfo + = typeof(AbpDbContext) + .GetMethod( + nameof(ConfigureValueGenerated), + BindingFlags.Instance | BindingFlags.NonPublic + ); + protected AbpDbContext(DbContextOptions options) : base(options) { @@ -89,6 +96,10 @@ namespace Volo.Abp.EntityFrameworkCore ConfigureValueConverterMethodInfo .MakeGenericMethod(entityType.ClrType) .Invoke(this, new object[] { modelBuilder, entityType }); + + ConfigureValueGeneratedMethodInfo + .MakeGenericMethod(entityType.ClrType) + .Invoke(this, new object[] { modelBuilder, entityType }); } } @@ -501,6 +512,23 @@ namespace Volo.Abp.EntityFrameworkCore } } + protected virtual void ConfigureValueGenerated(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) + where TEntity : class + { + if (!typeof(IEntity).IsAssignableFrom(typeof(TEntity))) + { + return; + } + + var idPropertyBuilder = modelBuilder.Entity().Property(x => ((IEntity) x).Id); + if (idPropertyBuilder.Metadata.PropertyInfo.IsDefined(typeof(DatabaseGeneratedAttribute), true)) + { + return; + } + + idPropertyBuilder.ValueGeneratedNever(); + } + protected virtual bool ShouldFilterEntity(IMutableEntityType entityType) where TEntity : class { if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity)))