From 2e75c5576897b0c74d1c4b423676a4130a42d548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 8 Apr 2018 15:55:25 +0300 Subject: [PATCH] Added EF Core Sql Server module and a few enhancements. --- Volo.Abp.sln | 9 +++++- .../AbpAspNetCoreMvcUiBootstrapModule.cs | 5 +++- .../Bundling/BundleCollection.cs | 3 +- src/Volo.Abp.Core/Volo/Abp/Check.cs | 11 +++++++ ...o.Abp.EntityFrameworkCore.SqlServer.csproj | 24 +++++++++++++++ ...ConfigurationContextSqlServerExtensions.cs | 25 ++++++++++++++++ .../AbpDbContextOptionsSqlServerExtensions.cs | 30 +++++++++++++++++++ .../AbpEntityFrameworkCoreSqlServerModule.cs | 16 ++++++++++ 8 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj create mode 100644 src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqlServerExtensions.cs create mode 100644 src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqlServerExtensions.cs create mode 100644 src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/SqlServer/AbpEntityFrameworkCoreSqlServerModule.cs diff --git a/Volo.Abp.sln b/Volo.Abp.sln index 1aa4760487..395adb5dab 100644 --- a/Volo.Abp.sln +++ b/Volo.Abp.sln @@ -166,7 +166,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Auditing", "src\Vo EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Auditing.Tests", "test\Volo.Abp.Auditing.Tests\Volo.Abp.Auditing.Tests.csproj", "{D5733D90-8C3D-4026-85E2-41DED26C4938}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.MongoDB.Tests", "test\Volo.Abp.MongoDB.Tests\Volo.Abp.MongoDB.Tests.csproj", "{82ED4DD2-DEF8-40D5-9BF9-663AFD35B06D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.MongoDB.Tests", "test\Volo.Abp.MongoDB.Tests\Volo.Abp.MongoDB.Tests.csproj", "{82ED4DD2-DEF8-40D5-9BF9-663AFD35B06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.EntityFrameworkCore.SqlServer", "src\Volo.Abp.EntityFrameworkCore.SqlServer\Volo.Abp.EntityFrameworkCore.SqlServer.csproj", "{6EABA98D-0B71-4ED7-A939-AFDA106D1151}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -466,6 +468,10 @@ Global {82ED4DD2-DEF8-40D5-9BF9-663AFD35B06D}.Debug|Any CPU.Build.0 = Debug|Any CPU {82ED4DD2-DEF8-40D5-9BF9-663AFD35B06D}.Release|Any CPU.ActiveCfg = Release|Any CPU {82ED4DD2-DEF8-40D5-9BF9-663AFD35B06D}.Release|Any CPU.Build.0 = Release|Any CPU + {6EABA98D-0B71-4ED7-A939-AFDA106D1151}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6EABA98D-0B71-4ED7-A939-AFDA106D1151}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6EABA98D-0B71-4ED7-A939-AFDA106D1151}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6EABA98D-0B71-4ED7-A939-AFDA106D1151}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -546,6 +552,7 @@ Global {03F51721-DA51-4BAE-9909-3FC88FAB7774} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {D5733D90-8C3D-4026-85E2-41DED26C4938} = {447C8A77-E5F0-4538-8687-7383196D04EA} {82ED4DD2-DEF8-40D5-9BF9-663AFD35B06D} = {447C8A77-E5F0-4538-8687-7383196D04EA} + {6EABA98D-0B71-4ED7-A939-AFDA106D1151} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs index 58c1de9d38..835fafa371 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs @@ -47,7 +47,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap "/libs/material/js/material-min.js", "/libs/datatables/datatables-min.js", "/libs/vue/vue.js", - "/libs/abp/abp-jquery.js?_v" + DateTime.Now.Ticks + "/libs/abp/abp-jquery.js?_v" + DateTime.Now.Ticks, + + "/Abp/ApplicationConfigurationScript?_v=" + DateTime.Now.Ticks, + "/Abp/ServiceProxyScript?_v=" + DateTime.Now.Ticks }); }); } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleCollection.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleCollection.cs index c52e2ac406..e04a6a0eeb 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleCollection.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleCollection.cs @@ -13,7 +13,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Bundling public void Add(string bundleName, string[] files) { - _bundles.GetOrAdd(bundleName, () => new List()).AddRange(files); + var list = _bundles.GetOrAdd(bundleName, () => new List()); + list.AddRange(files); } public List GetFiles(string bundleName) diff --git a/src/Volo.Abp.Core/Volo/Abp/Check.cs b/src/Volo.Abp.Core/Volo/Abp/Check.cs index acf716c9bd..2a814a585a 100644 --- a/src/Volo.Abp.Core/Volo/Abp/Check.cs +++ b/src/Volo.Abp.Core/Volo/Abp/Check.cs @@ -41,6 +41,17 @@ namespace Volo.Abp return value; } + [ContractAnnotation("value:null => halt")] + public static string NotNullOrEmpty(string value, [InvokerParameterName] [NotNull] string parameterName) + { + if (value.IsNullOrEmpty()) + { + throw new ArgumentException($"{parameterName} can not be null or empty!", parameterName); + } + + return value; + } + [ContractAnnotation("value:null => halt")] public static ICollection NotNullOrEmpty(ICollection value, [InvokerParameterName] [NotNull] string parameterName) { diff --git a/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj b/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj new file mode 100644 index 0000000000..c1d3c4c780 --- /dev/null +++ b/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj @@ -0,0 +1,24 @@ + + + + + + netstandard2.0 + Volo.Abp.EntityFrameworkCore.SqlServer + Volo.Abp.EntityFrameworkCore.SqlServer + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + + + + diff --git a/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqlServerExtensions.cs b/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqlServerExtensions.cs new file mode 100644 index 0000000000..b916239c3b --- /dev/null +++ b/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextSqlServerExtensions.cs @@ -0,0 +1,25 @@ +using System; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Volo.Abp.EntityFrameworkCore.DependencyInjection; + +namespace Volo.Abp.EntityFrameworkCore +{ + public static class AbpDbContextConfigurationContextSqlServerExtensions + { + public static DbContextOptionsBuilder UseSqlServer( + [NotNull] this AbpDbContextConfigurationContext context, + [CanBeNull] Action sqlServerOptionsAction = null) + { + if (context.ExistingConnection != null) + { + return context.DbContextOptions.UseSqlServer(context.ExistingConnection, sqlServerOptionsAction); + } + else + { + return context.DbContextOptions.UseSqlServer(context.ConnectionString, sqlServerOptionsAction); + } + } + } +} diff --git a/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqlServerExtensions.cs b/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqlServerExtensions.cs new file mode 100644 index 0000000000..bbc892c5ab --- /dev/null +++ b/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsSqlServerExtensions.cs @@ -0,0 +1,30 @@ +using System; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore.Infrastructure; + +namespace Volo.Abp.EntityFrameworkCore +{ + public static class AbpDbContextOptionsSqlServerExtensions + { + public static void UseSqlServer( + [NotNull] this AbpDbContextOptions options, + [CanBeNull] Action sqlServerOptionsAction = null) + { + options.Configure(context => + { + context.UseSqlServer(sqlServerOptionsAction); + }); + } + + public static void UseSqlServer( + [NotNull] this AbpDbContextOptions options, + [CanBeNull] Action sqlServerOptionsAction = null) + where TDbContext : AbpDbContext + { + options.Configure(context => + { + context.UseSqlServer(sqlServerOptionsAction); + }); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/SqlServer/AbpEntityFrameworkCoreSqlServerModule.cs b/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/SqlServer/AbpEntityFrameworkCoreSqlServerModule.cs new file mode 100644 index 0000000000..bafe744f4d --- /dev/null +++ b/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/SqlServer/AbpEntityFrameworkCoreSqlServerModule.cs @@ -0,0 +1,16 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace Volo.Abp.EntityFrameworkCore.SqlServer +{ + [DependsOn( + typeof(AbpEntityFrameworkCoreModule) + )] + public class AbpEntityFrameworkCoreSqlServerModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + } + } +}