diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj
index 967a3cad7c..cde37075a3 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj
@@ -26,6 +26,7 @@
+
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs
index 463a7b18a6..447241d15b 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs
@@ -6,7 +6,8 @@ namespace MyCompanyName.MyProjectName.DbMigrator
{
[DependsOn(
typeof(AbpAutofacModule),
- typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule)
+ typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule),
+ typeof(MyProjectNameApplicationContractsModule)
)]
public class MyProjectNameDbMigratorModule : AbpModule
{
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs
index d1740655c7..fef853b693 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs
@@ -6,6 +6,6 @@
* If you will never need to multi-tenancy, you can remove
* related modules and code parts, including this file.
*/
- public const bool IsMultiTenancyEnabled = true;
+ public const bool IsEnabled = true;
}
}
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs
index a391ad8f38..c8434867e3 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs
@@ -31,7 +31,7 @@ namespace MyCompanyName.MyProjectName
{
Configure(options =>
{
- options.IsEnabled = MultiTenancyConsts.IsMultiTenancyEnabled;
+ options.IsEnabled = MultiTenancyConsts.IsEnabled;
});
}
}
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj
index afcdbb8a7f..e719e8aeb5 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj
@@ -16,11 +16,11 @@
+
+
-
-
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
index 8f883bead9..ca5a3e6773 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
@@ -48,10 +48,10 @@ namespace MyCompanyName.MyProjectName
{
Configure(options =>
{
- options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Domain.Shared", Path.DirectorySeparatorChar)));
- options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Domain", Path.DirectorySeparatorChar)));
- options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Application.Contracts", Path.DirectorySeparatorChar)));
- options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Application", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Domain.Shared", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Domain", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Application.Contracts", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Application", Path.DirectorySeparatorChar)));
});
}
}
@@ -121,7 +121,7 @@ namespace MyCompanyName.MyProjectName
app.UseVirtualFiles();
app.UseAuthentication();
- if (MultiTenancyConsts.IsMultiTenancyEnabled)
+ if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
index a583958070..b035cc6e92 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
@@ -62,6 +62,7 @@ namespace MyCompanyName.MyProjectName
{
Configure(options =>
{
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Domain.Shared", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Domain", Path.DirectorySeparatorChar)));
//
options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.UI", Path.DirectorySeparatorChar)));
@@ -105,12 +106,10 @@ namespace MyCompanyName.MyProjectName
app.UseCorrelationId();
app.UseVirtualFiles();
app.UseAuthentication();
-
- if (MultiTenancyConsts.IsMultiTenancyEnabled)
+ if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
-
app.UseIdentityServer();
app.UseAbpRequestLocalization();
app.UseAuditing();
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/Menus/MyProjectNameMenuContributor.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/Menus/MyProjectNameMenuContributor.cs
index 9e313144d7..3c1f22206a 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/Menus/MyProjectNameMenuContributor.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/Menus/MyProjectNameMenuContributor.cs
@@ -20,7 +20,7 @@ namespace MyCompanyName.MyProjectName.Menus
private async Task ConfigureMainMenuAsync(MenuConfigurationContext context)
{
- if (!MultiTenancyConsts.IsMultiTenancyEnabled)
+ if (!MultiTenancyConsts.IsEnabled)
{
var administration = context.Menu.GetAdministration();
administration.TryRemoveMenuItem(TenantManagementMenuNames.GroupName);
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs
index 294605afd7..01353ad6ed 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs
@@ -87,7 +87,10 @@ namespace MyCompanyName.MyProjectName
private void ConfigureMultiTenancy()
{
- Configure(options => { options.IsEnabled = MultiTenancyConsts.IsMultiTenancyEnabled; });
+ Configure(options =>
+ {
+ options.IsEnabled = MultiTenancyConsts.IsEnabled;
+ });
}
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfigurationRoot configuration)
@@ -143,6 +146,7 @@ namespace MyCompanyName.MyProjectName
Configure(options =>
{
options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Domain", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Application.Contracts", Path.DirectorySeparatorChar)));
//
options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.UI", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.AspNetCore.Mvc.UI", Path.DirectorySeparatorChar)));
@@ -212,7 +216,7 @@ namespace MyCompanyName.MyProjectName
app.UseVirtualFiles();
app.UseAuthentication();
- if (MultiTenancyConsts.IsMultiTenancyEnabled)
+ if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web/Menus/MyProjectNameMenuContributor.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Web/Menus/MyProjectNameMenuContributor.cs
index 9e313144d7..3c1f22206a 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.Web/Menus/MyProjectNameMenuContributor.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web/Menus/MyProjectNameMenuContributor.cs
@@ -20,7 +20,7 @@ namespace MyCompanyName.MyProjectName.Menus
private async Task ConfigureMainMenuAsync(MenuConfigurationContext context)
{
- if (!MultiTenancyConsts.IsMultiTenancyEnabled)
+ if (!MultiTenancyConsts.IsEnabled)
{
var administration = context.Menu.GetAdministration();
administration.TryRemoveMenuItem(TenantManagementMenuNames.GroupName);
diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs
index 2e737fca23..0404c3cec9 100644
--- a/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs
+++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs
@@ -112,6 +112,10 @@ namespace MyCompanyName.MyProjectName
Configure(options =>
{
options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Domain.Shared", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Domain", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Application.Contracts", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}MyCompanyName.MyProjectName.Application", Path.DirectorySeparatorChar)));
+ options.FileSets.ReplaceEmbeddedByPhysical(hostingEnvironment.ContentRootPath);
//
options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.UI", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.AspNetCore.Mvc.UI", Path.DirectorySeparatorChar)));
@@ -189,7 +193,7 @@ namespace MyCompanyName.MyProjectName
app.UseAuthentication();
app.UseJwtTokenMiddleware();
- if (MultiTenancyConsts.IsMultiTenancyEnabled)
+ if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();
}
diff --git a/templates/service/.gitignore b/templates/service/.gitignore
index 1114901d9b..7961d3faf0 100644
--- a/templates/service/.gitignore
+++ b/templates/service/.gitignore
@@ -252,4 +252,5 @@ paket-files/
*.sln.iml
# MyProjectName
-src/MyCompanyName.MyProjectName.Web/Logs/logs.txt
+host/IdentityServerHost/Logs/logs.txt
+host/MyCompanyName.MyProjectName.HttpApi.Host/Logs/logs.txt
diff --git a/templates/service/MyCompanyName.MyProjectName.sln b/templates/service/MyCompanyName.MyProjectName.sln
index 672edae8c7..3c1e93a2c5 100644
--- a/templates/service/MyCompanyName.MyProjectName.sln
+++ b/templates/service/MyCompanyName.MyProjectName.sln
@@ -25,8 +25,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi.Client", "src\MyCompanyName.MyProjectName.HttpApi.Client\MyCompanyName.MyProjectName.HttpApi.Client.csproj", "{36E2735F-CEAB-44C8-A6D1-2CDAFF399751}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Host", "host\MyCompanyName.MyProjectName.Host\MyCompanyName.MyProjectName.Host.csproj", "{E7353C9A-4357-4A40-A39A-52B73F5A0CA1}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServerHost", "host\IdentityServerHost\IdentityServerHost.csproj", "{3F3E0DCA-DA28-42FA-ABC8-F49E5A920D68}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleClient", "host\ConsoleClient\ConsoleClient.csproj", "{2A9E859C-BB5A-4A10-BB33-97ECBF10A8C8}"
@@ -41,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Application.Tests", "test\MyCompanyName.MyProjectName.Application.Tests\MyCompanyName.MyProjectName.Application.Tests.csproj", "{90CB5DC4-C040-45C7-8900-9688B26405BC}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi.Host", "host\MyCompanyName.MyProjectName.HttpApi.Host\MyCompanyName.MyProjectName.HttpApi.Host.csproj", "{37B135B0-DAFE-4616-B25C-1BDF32FC44A2}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -79,10 +79,6 @@ Global
{36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Debug|Any CPU.Build.0 = Debug|Any CPU
{36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Release|Any CPU.ActiveCfg = Release|Any CPU
{36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Release|Any CPU.Build.0 = Release|Any CPU
- {E7353C9A-4357-4A40-A39A-52B73F5A0CA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E7353C9A-4357-4A40-A39A-52B73F5A0CA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E7353C9A-4357-4A40-A39A-52B73F5A0CA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E7353C9A-4357-4A40-A39A-52B73F5A0CA1}.Release|Any CPU.Build.0 = Release|Any CPU
{3F3E0DCA-DA28-42FA-ABC8-F49E5A920D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3F3E0DCA-DA28-42FA-ABC8-F49E5A920D68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3F3E0DCA-DA28-42FA-ABC8-F49E5A920D68}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -111,6 +107,10 @@ Global
{90CB5DC4-C040-45C7-8900-9688B26405BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90CB5DC4-C040-45C7-8900-9688B26405BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90CB5DC4-C040-45C7-8900-9688B26405BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -124,7 +124,6 @@ Global
{F1C58097-4C08-4D88-8976-6B3389391481} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545}
{077AA5F8-8B61-420C-A6B5-0150A66FDB34} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545}
{36E2735F-CEAB-44C8-A6D1-2CDAFF399751} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545}
- {E7353C9A-4357-4A40-A39A-52B73F5A0CA1} = {E400416D-2895-4512-9D17-90681EEC7E0A}
{3F3E0DCA-DA28-42FA-ABC8-F49E5A920D68} = {E400416D-2895-4512-9D17-90681EEC7E0A}
{2A9E859C-BB5A-4A10-BB33-97ECBF10A8C8} = {E400416D-2895-4512-9D17-90681EEC7E0A}
{C5BB573D-3030-4BCB-88B7-F6A85C32766C} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D}
@@ -132,6 +131,7 @@ Global
{D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D}
{E60895E5-79C4-447D-88B7-85CB5BA336A4} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D}
{90CB5DC4-C040-45C7-8900-9688B26405BC} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D}
+ {37B135B0-DAFE-4616-B25C-1BDF32FC44A2} = {E400416D-2895-4512-9D17-90681EEC7E0A}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4324B3B4-B60B-4E3C-91D8-59576B4E26DD}
diff --git a/templates/service/host/ConsoleClient/ClientDemoService.cs b/templates/service/host/ConsoleClient/ClientDemoService.cs
new file mode 100644
index 0000000000..cc37a2e7e2
--- /dev/null
+++ b/templates/service/host/ConsoleClient/ClientDemoService.cs
@@ -0,0 +1,22 @@
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+
+namespace ConsoleClient
+{
+ public class ClientDemoService : ITransientDependency
+ {
+ //private readonly ISampleAppService _sampleAppService;
+
+ public ClientDemoService(
+ //ISampleAppService sampleAppService
+ )
+ {
+ //_sampleAppService = sampleAppService;
+ }
+
+ public async Task RunAsync()
+ {
+ //var output = await _sampleAppService.Method1Async();
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/service/host/ConsoleClient/ConsoleClient.csproj b/templates/service/host/ConsoleClient/ConsoleClient.csproj
index daa14a3567..c32633d9e7 100644
--- a/templates/service/host/ConsoleClient/ConsoleClient.csproj
+++ b/templates/service/host/ConsoleClient/ConsoleClient.csproj
@@ -6,7 +6,22 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+ Always
+
diff --git a/templates/service/host/ConsoleClient/MyProjectNameConsoleApiClientModule.cs b/templates/service/host/ConsoleClient/MyProjectNameConsoleApiClientModule.cs
new file mode 100644
index 0000000000..0055781764
--- /dev/null
+++ b/templates/service/host/ConsoleClient/MyProjectNameConsoleApiClientModule.cs
@@ -0,0 +1,15 @@
+using MyCompanyName.MyProjectName;
+using Volo.Abp.Http.Client.IdentityModel;
+using Volo.Abp.Modularity;
+
+namespace ConsoleClient
+{
+ [DependsOn(
+ typeof(MyProjectNameHttpApiClientModule),
+ typeof(AbpHttpClientIdentityModelModule)
+ )]
+ public class MyProjectNameConsoleApiClientModule : AbpModule
+ {
+
+ }
+}
diff --git a/templates/service/host/ConsoleClient/Program.cs b/templates/service/host/ConsoleClient/Program.cs
index 4e4c789996..3f0bf44f24 100644
--- a/templates/service/host/ConsoleClient/Program.cs
+++ b/templates/service/host/ConsoleClient/Program.cs
@@ -1,7 +1,7 @@
using System;
-using System.Net.Http;
-using System.Threading.Tasks;
-using IdentityModel.Client;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp;
+using Volo.Abp.Threading;
namespace ConsoleClient
{
@@ -9,45 +9,15 @@ namespace ConsoleClient
{
static void Main(string[] args)
{
- RunDemo().Wait();
- Console.ReadLine();
- }
-
- private static async Task RunDemo()
- {
- // discover endpoints from metadata
- var disco = await DiscoveryClient.GetAsync("http://localhost:61517");
- if (disco.IsError)
- {
- Console.WriteLine(disco.Error);
- return;
- }
-
- // request token
- var tokenClient = new TokenClient(disco.TokenEndpoint, "test-client", "secret");
- var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api1");
-
- if (tokenResponse.IsError)
+ using (var application = AbpApplicationFactory.Create())
{
- Console.WriteLine(tokenResponse.Error);
- return;
- }
-
- Console.WriteLine(tokenResponse.Json);
+ application.Initialize();
- // call api
- var client = new HttpClient();
- client.SetBearerToken(tokenResponse.AccessToken);
+ var demo = application.ServiceProvider.GetRequiredService();
+ AsyncHelper.RunSync(() => demo.RunAsync());
- var response = await client.GetAsync("http://localhost:57992/api/MyProjectName/todos/");
- if (!response.IsSuccessStatusCode)
- {
- Console.WriteLine(response.StatusCode);
- }
- else
- {
- var content = await response.Content.ReadAsStringAsync();
- Console.WriteLine(content);
+ Console.WriteLine("Press ENTER to stop application...");
+ Console.ReadLine();
}
}
}
diff --git a/templates/service/host/ConsoleClient/appsettings.json b/templates/service/host/ConsoleClient/appsettings.json
new file mode 100644
index 0000000000..e183f6ba53
--- /dev/null
+++ b/templates/service/host/ConsoleClient/appsettings.json
@@ -0,0 +1,18 @@
+{
+ "RemoteServices": {
+ "Default": {
+ "BaseUrl": "https://localhost:44395/"
+ }
+ },
+ "IdentityClients": {
+ "Default": {
+ "GrantType": "password",
+ "ClientId": "MyProjectName_ConsoleTestApp",
+ "ClientSecret": "1q2w3e*",
+ "UserName": "admin",
+ "UserPassword": "1q2w3E*",
+ "Authority": "https://localhost:44348",
+ "Scope": "MyProjectName"
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/service/host/IdentityServerHost/DemoAppDbContext.cs b/templates/service/host/IdentityServerHost/EntityFrameworkCore/IdentityServerHostMigrationsDbContext.cs
similarity index 74%
rename from templates/service/host/IdentityServerHost/DemoAppDbContext.cs
rename to templates/service/host/IdentityServerHost/EntityFrameworkCore/IdentityServerHostMigrationsDbContext.cs
index 5d418a19e0..9d1ba48a94 100644
--- a/templates/service/host/IdentityServerHost/DemoAppDbContext.cs
+++ b/templates/service/host/IdentityServerHost/EntityFrameworkCore/IdentityServerHostMigrationsDbContext.cs
@@ -6,11 +6,11 @@ using Volo.Abp.IdentityServer.EntityFrameworkCore;
using Volo.Abp.PermissionManagement.EntityFrameworkCore;
using Volo.Abp.SettingManagement.EntityFrameworkCore;
-namespace IdentityServerHost
+namespace IdentityServerHost.EntityFrameworkCore
{
- public class DemoAppDbContext : AbpDbContext
+ public class IdentityServerHostMigrationsDbContext : AbpDbContext
{
- public DemoAppDbContext(DbContextOptions options)
+ public IdentityServerHostMigrationsDbContext(DbContextOptions options)
: base(options)
{
diff --git a/templates/service/host/IdentityServerHost/DemoAppDbContextFactory.cs b/templates/service/host/IdentityServerHost/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs
similarity index 58%
rename from templates/service/host/IdentityServerHost/DemoAppDbContextFactory.cs
rename to templates/service/host/IdentityServerHost/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs
index 706f131fd5..f3df6d6afd 100644
--- a/templates/service/host/IdentityServerHost/DemoAppDbContextFactory.cs
+++ b/templates/service/host/IdentityServerHost/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs
@@ -3,18 +3,18 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
-namespace IdentityServerHost
+namespace IdentityServerHost.EntityFrameworkCore
{
- public class DemoAppDbContextFactory : IDesignTimeDbContextFactory
+ public class IdentityServerHostMigrationsDbContextFactory : IDesignTimeDbContextFactory
{
- public DemoAppDbContext CreateDbContext(string[] args)
+ public IdentityServerHostMigrationsDbContext CreateDbContext(string[] args)
{
var configuration = BuildConfiguration();
- var builder = new DbContextOptionsBuilder()
+ var builder = new DbContextOptionsBuilder()
.UseSqlServer(configuration.GetConnectionString("Default"));
- return new DemoAppDbContext(builder.Options);
+ return new IdentityServerHostMigrationsDbContext(builder.Options);
}
private static IConfigurationRoot BuildConfiguration()
diff --git a/templates/service/host/IdentityServerHost/IdentityServerDataSeedContributor.cs b/templates/service/host/IdentityServerHost/IdentityServerDataSeedContributor.cs
new file mode 100644
index 0000000000..edcd1195ea
--- /dev/null
+++ b/templates/service/host/IdentityServerHost/IdentityServerDataSeedContributor.cs
@@ -0,0 +1,203 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Configuration;
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Guids;
+using Volo.Abp.IdentityServer.ApiResources;
+using Volo.Abp.IdentityServer.Clients;
+using Volo.Abp.IdentityServer.IdentityResources;
+using Volo.Abp.PermissionManagement;
+using Volo.Abp.Uow;
+
+namespace IdentityServerHost
+{
+ public class IdentityServerDataSeedContributor : IDataSeedContributor, ITransientDependency
+ {
+ private readonly IApiResourceRepository _apiResourceRepository;
+ private readonly IClientRepository _clientRepository;
+ private readonly IIdentityResourceDataSeeder _identityResourceDataSeeder;
+ private readonly IGuidGenerator _guidGenerator;
+ private readonly IPermissionDataSeeder _permissionDataSeeder;
+ private readonly IConfigurationAccessor _configurationAccessor;
+
+ public IdentityServerDataSeedContributor(
+ IClientRepository clientRepository,
+ IApiResourceRepository apiResourceRepository,
+ IIdentityResourceDataSeeder identityResourceDataSeeder,
+ IGuidGenerator guidGenerator,
+ IPermissionDataSeeder permissionDataSeeder,
+ IConfigurationAccessor configurationAccessor)
+ {
+ _clientRepository = clientRepository;
+ _apiResourceRepository = apiResourceRepository;
+ _identityResourceDataSeeder = identityResourceDataSeeder;
+ _guidGenerator = guidGenerator;
+ _permissionDataSeeder = permissionDataSeeder;
+ _configurationAccessor = configurationAccessor;
+ }
+
+ [UnitOfWork]
+ public virtual async Task SeedAsync(DataSeedContext context)
+ {
+ await _identityResourceDataSeeder.CreateStandardResourcesAsync();
+ await CreateApiResourcesAsync();
+ await CreateClientsAsync();
+ }
+
+ private async Task CreateApiResourcesAsync()
+ {
+ var commonApiUserClaims = new[]
+ {
+ "email",
+ "email_verified",
+ "name",
+ "phone_number",
+ "phone_number_verified",
+ "role"
+ };
+
+ await CreateApiResourceAsync("MyProjectName", commonApiUserClaims);
+ }
+
+ private async Task CreateApiResourceAsync(string name, IEnumerable claims)
+ {
+ var apiResource = await _apiResourceRepository.FindByNameAsync(name);
+ if (apiResource == null)
+ {
+ apiResource = await _apiResourceRepository.InsertAsync(
+ new ApiResource(
+ _guidGenerator.Create(),
+ name,
+ name + " API"
+ ),
+ autoSave: true
+ );
+ }
+
+ foreach (var claim in claims)
+ {
+ if (apiResource.FindClaim(claim) == null)
+ {
+ apiResource.AddUserClaim(claim);
+ }
+ }
+
+ return await _apiResourceRepository.UpdateAsync(apiResource);
+ }
+
+ private async Task CreateClientsAsync()
+ {
+ const string commonSecret = "E5Xd4yMqjP5kjWFKrYgySBju6JVfCzMyFp7n2QmMrME=";
+
+ var commonScopes = new[]
+ {
+ "email",
+ "openid",
+ "profile",
+ "role",
+ "phone",
+ "address",
+ "MyProjectName"
+ };
+
+ var configurationSection = _configurationAccessor.Configuration.GetSection("IdentityServer:Clients");
+
+ //Console Test Client
+ var consoleClientId = configurationSection["ConsoleClient:ClientId"];
+ if (!consoleClientId.IsNullOrWhiteSpace())
+ {
+ await CreateClientAsync(
+ consoleClientId,
+ commonScopes,
+ new[] { "password", "client_credentials" },
+ commonSecret
+ );
+ }
+ }
+
+ private async Task CreateClientAsync(
+ string name,
+ IEnumerable scopes,
+ IEnumerable grantTypes,
+ string secret,
+ string redirectUri = null,
+ string postLogoutRedirectUri = null,
+ IEnumerable permissions = null)
+ {
+ var client = await _clientRepository.FindByCliendIdAsync(name);
+ if (client == null)
+ {
+ client = await _clientRepository.InsertAsync(
+ new Client(
+ _guidGenerator.Create(),
+ name
+ )
+ {
+ ClientName = name,
+ ProtocolType = "oidc",
+ Description = name,
+ AlwaysIncludeUserClaimsInIdToken = true,
+ AllowOfflineAccess = true,
+ AbsoluteRefreshTokenLifetime = 31536000, //365 days
+ AccessTokenLifetime = 31536000, //365 days
+ AuthorizationCodeLifetime = 300,
+ IdentityTokenLifetime = 300,
+ RequireConsent = false
+ },
+ autoSave: true
+ );
+ }
+
+ foreach (var scope in scopes)
+ {
+ if (client.FindScope(scope) == null)
+ {
+ client.AddScope(scope);
+ }
+ }
+
+ foreach (var grantType in grantTypes)
+ {
+ if (client.FindGrantType(grantType) == null)
+ {
+ client.AddGrantType(grantType);
+ }
+ }
+
+ if (client.FindSecret(secret) == null)
+ {
+ client.AddSecret(secret);
+ }
+
+ if (redirectUri != null)
+ {
+ if (client.FindRedirectUri(redirectUri) == null)
+ {
+ client.AddRedirectUri(redirectUri);
+ }
+ }
+
+ if (postLogoutRedirectUri != null)
+ {
+ if (client.FindPostLogoutRedirectUri(postLogoutRedirectUri) == null)
+ {
+ client.AddPostLogoutRedirectUri(postLogoutRedirectUri);
+ }
+ }
+
+ if (permissions != null)
+ {
+ await _permissionDataSeeder.SeedAsync(
+ ClientPermissionValueProvider.ProviderName,
+ name,
+ permissions
+ );
+ }
+
+ return await _clientRepository.UpdateAsync(client);
+ }
+ }
+}
diff --git a/templates/service/host/IdentityServerHost/IdentityServerDataSeeder.cs b/templates/service/host/IdentityServerHost/IdentityServerDataSeeder.cs
deleted file mode 100644
index 054a895594..0000000000
--- a/templates/service/host/IdentityServerHost/IdentityServerDataSeeder.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.IdentityServer.ApiResources;
-using Volo.Abp.IdentityServer.Clients;
-using Volo.Abp.IdentityServer.IdentityResources;
-using Volo.Abp.Threading;
-
-namespace IdentityServerHost
-{
- public class IdentityServerDataSeeder : ITransientDependency
- {
- private readonly IApiResourceRepository _apiResourceRepository;
- private readonly IClientRepository _clientRepository;
- private readonly IIdentityResourceRepository _identityResourceRepository;
-
- public IdentityServerDataSeeder(
- IClientRepository clientRepository,
- IApiResourceRepository apiResourceRepository,
- IIdentityResourceRepository identityResourceRepository)
- {
- _clientRepository = clientRepository;
- _apiResourceRepository = apiResourceRepository;
- _identityResourceRepository = identityResourceRepository;
- }
-
- public void Seed()
- {
- AsyncHelper.RunSync(SeedAsync);
- }
-
- private async Task SeedAsync()
- {
- if (await _clientRepository.FindByCliendIdAsync("test-client") != null)
- {
- return;
- }
-
- await SaveApiResource();
- await SaveClientAsync();
- await SaveIdentityResourcesAsync();
- }
-
- private async Task SaveApiResource()
- {
- var apiResource = new ApiResource(
- Guid.NewGuid(),
- "api1",
- "My API",
- "My api resource description"
- );
-
- apiResource.AddUserClaim("email");
- apiResource.AddUserClaim("role");
-
- await _apiResourceRepository.InsertAsync(apiResource);
- }
-
- private async Task SaveClientAsync()
- {
- var client = new Client(
- Guid.NewGuid(),
- "test-client"
- )
- {
- ClientName = "test-client",
- ProtocolType = "oidc",
- Description = "test-client",
- AlwaysIncludeUserClaimsInIdToken = true,
- AllowOfflineAccess = true,
- AbsoluteRefreshTokenLifetime = 31536000 //365 days
- };
-
- client.AddScope("api1");
- client.AddScope("email");
- client.AddScope("openid");
- client.AddScope("profile");
- client.AddScope("roles");
- client.AddScope("unique_name");
-
- client.AddGrantType("client_credentials");
- client.AddGrantType("password");
-
- client.AddSecret("K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=");
-
- await _clientRepository.InsertAsync(client);
- }
-
- private async Task SaveIdentityResourcesAsync()
- {
- var identityResourceOpenId = new IdentityResource(Guid.NewGuid(), "openid", "OpenID", required: true);
- await _identityResourceRepository.InsertAsync(identityResourceOpenId);
-
- var identityResourceEmail = new IdentityResource(Guid.NewGuid(), "email", "Email", required: true);
- identityResourceEmail.AddUserClaim("email");
- identityResourceEmail.AddUserClaim("email_verified");
- await _identityResourceRepository.InsertAsync(identityResourceEmail);
-
- var identityResourceRole = new IdentityResource(Guid.NewGuid(), "roles", "Roles", required: true);
- identityResourceRole.AddUserClaim("role");
- await _identityResourceRepository.InsertAsync(identityResourceRole);
-
- var identityResourceProfile = new IdentityResource(Guid.NewGuid(), "profile", "Profile", required: true);
- identityResourceProfile.AddUserClaim("unique_name");
- await _identityResourceRepository.InsertAsync(identityResourceProfile);
- }
- }
-}
diff --git a/templates/service/host/IdentityServerHost/IdentityServerHost.csproj b/templates/service/host/IdentityServerHost/IdentityServerHost.csproj
index 7e72681de0..5eb48f1e48 100644
--- a/templates/service/host/IdentityServerHost/IdentityServerHost.csproj
+++ b/templates/service/host/IdentityServerHost/IdentityServerHost.csproj
@@ -8,10 +8,10 @@
-
-
-
+
+
+
@@ -29,4 +29,12 @@
+
+
+
+ signed
+
+
+
+
diff --git a/templates/service/host/IdentityServerHost/IdentityServerHostModule.cs b/templates/service/host/IdentityServerHost/IdentityServerHostModule.cs
index 683987b86a..83874b9ab4 100644
--- a/templates/service/host/IdentityServerHost/IdentityServerHostModule.cs
+++ b/templates/service/host/IdentityServerHost/IdentityServerHostModule.cs
@@ -1,8 +1,13 @@
-using Microsoft.AspNetCore.Builder;
-using Microsoft.Extensions.Configuration;
+using IdentityServerHost.MultiTenancy;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.DataProtection;
+using StackExchange.Redis;
using Volo.Abp;
+using Volo.Abp.AspNetCore.MultiTenancy;
using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.AuditLogging.EntityFrameworkCore;
using Volo.Abp.Autofac;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
@@ -10,17 +15,25 @@ using Volo.Abp.EntityFrameworkCore.SqlServer;
using Volo.Abp.Identity.AspNetCore;
using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.IdentityServer.EntityFrameworkCore;
+using Volo.Abp.Localization;
using Volo.Abp.Modularity;
+using Volo.Abp.PermissionManagement.EntityFrameworkCore;
+using Volo.Abp.SettingManagement.EntityFrameworkCore;
+using Volo.Abp.Threading;
namespace IdentityServerHost
{
[DependsOn(
- typeof(AbpAutofacModule),
+ typeof(AbpAspNetCoreMultiTenancyModule),
typeof(AbpAspNetCoreMvcModule),
+ typeof(AbpAuditLoggingEntityFrameworkCoreModule),
+ typeof(AbpAutofacModule),
+ typeof(AbpEntityFrameworkCoreSqlServerModule),
typeof(AbpIdentityAspNetCoreModule),
- typeof(AbpIdentityServerEntityFrameworkCoreModule),
typeof(AbpIdentityEntityFrameworkCoreModule),
- typeof(AbpEntityFrameworkCoreSqlServerModule)
+ typeof(AbpIdentityServerEntityFrameworkCoreModule),
+ typeof(AbpPermissionManagementEntityFrameworkCoreModule),
+ typeof(AbpSettingManagementEntityFrameworkCoreModule)
)]
public class IdentityServerHostModule : AbpModule
{
@@ -29,28 +42,29 @@ namespace IdentityServerHost
var hostingEnvironment = context.Services.GetHostingEnvironment();
var configuration = context.Services.BuildConfiguration();
- Configure(options =>
- {
- options.ConnectionStrings.Default = configuration.GetConnectionString("Default");
- });
-
Configure(options =>
{
options.UseSqlServer();
});
- Configure(iis =>
+ Configure(options =>
{
- iis.AuthenticationDisplayName = "Windows";
- iis.AutomaticAuthentication = false;
+ options.Languages.Add(new LanguageInfo("en", "en", "English"));
+ //...you can add other languages
});
- context.Services.AddDistributedSqlServerCache(options =>
+ context.Services.AddDistributedRedisCache(options =>
{
- options.ConnectionString = configuration.GetConnectionString("SqlServerCache");
- options.SchemaName = "dbo";
- options.TableName = "TestCache";
+ options.Configuration = configuration["Redis:Configuration"];
});
+
+ if (!hostingEnvironment.IsDevelopment())
+ {
+ var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
+ context.Services
+ .AddDataProtection()
+ .PersistKeysToStackExchangeRedis(redis, "MyProjectName-Protection-Keys");
+ }
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
@@ -58,11 +72,14 @@ namespace IdentityServerHost
var app = context.GetApplicationBuilder();
app.UseVirtualFiles();
-
app.UseAuthentication();
-
+ if (MultiTenancyConsts.IsEnabled)
+ {
+ app.UseMultiTenancy();
+ }
app.UseIdentityServer();
-
+ app.UseAbpRequestLocalization();
+ app.UseAuditing();
app.UseMvcWithDefaultRoute();
SeedData(context);
@@ -70,12 +87,15 @@ namespace IdentityServerHost
private void SeedData(ApplicationInitializationContext context)
{
- using (var scope = context.ServiceProvider.CreateScope())
+ AsyncHelper.RunSync(async () =>
{
- scope.ServiceProvider
- .GetRequiredService()
- .Seed();
- }
+ using (var scope = context.ServiceProvider.CreateScope())
+ {
+ await scope.ServiceProvider
+ .GetRequiredService()
+ .SeedAsync();
+ }
+ });
}
}
}
diff --git a/templates/service/host/IdentityServerHost/Migrations/20190410095119_Initial.Designer.cs b/templates/service/host/IdentityServerHost/Migrations/20190410095119_Initial.Designer.cs
deleted file mode 100644
index edb0c5cedf..0000000000
--- a/templates/service/host/IdentityServerHost/Migrations/20190410095119_Initial.Designer.cs
+++ /dev/null
@@ -1,1227 +0,0 @@
-//
-using System;
-using IdentityServerHost;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-namespace IdentityServerHost.Migrations
-{
- [DbContext(typeof(DemoAppDbContext))]
- [Migration("20190410095119_Initial")]
- partial class Initial
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
- .HasAnnotation("Relational:MaxIdentifierLength", 128)
- .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
-
- modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ApplicationName")
- .HasColumnName("ApplicationName")
- .HasMaxLength(96);
-
- b.Property("BrowserInfo")
- .HasColumnName("BrowserInfo")
- .HasMaxLength(512);
-
- b.Property("ClientId")
- .HasColumnName("ClientId")
- .HasMaxLength(64);
-
- b.Property("ClientIpAddress")
- .HasColumnName("ClientIpAddress")
- .HasMaxLength(64);
-
- b.Property("ClientName")
- .HasColumnName("ClientName")
- .HasMaxLength(128);
-
- b.Property("Comments")
- .HasColumnName("Comments")
- .HasMaxLength(256);
-
- b.Property("ConcurrencyStamp");
-
- b.Property("CorrelationId")
- .HasColumnName("CorrelationId")
- .HasMaxLength(64);
-
- b.Property("Exceptions")
- .HasColumnName("Exceptions")
- .HasMaxLength(4000);
-
- b.Property("ExecutionDuration")
- .HasColumnName("ExecutionDuration");
-
- b.Property("ExecutionTime");
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("HttpMethod")
- .HasColumnName("HttpMethod")
- .HasMaxLength(16);
-
- b.Property("HttpStatusCode")
- .HasColumnName("HttpStatusCode");
-
- b.Property("ImpersonatorTenantId")
- .HasColumnName("ImpersonatorTenantId");
-
- b.Property("ImpersonatorUserId")
- .HasColumnName("ImpersonatorUserId");
-
- b.Property("TenantId")
- .HasColumnName("TenantId");
-
- b.Property("TenantName");
-
- b.Property("Url")
- .HasColumnName("Url")
- .HasMaxLength(256);
-
- b.Property("UserId")
- .HasColumnName("UserId");
-
- b.Property("UserName")
- .HasColumnName("UserName")
- .HasMaxLength(256);
-
- b.HasKey("Id");
-
- b.HasIndex("TenantId", "ExecutionTime");
-
- b.HasIndex("TenantId", "UserId", "ExecutionTime");
-
- b.ToTable("AbpAuditLogs");
- });
-
- modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("AuditLogId")
- .HasColumnName("AuditLogId");
-
- b.Property("ExecutionDuration")
- .HasColumnName("ExecutionDuration");
-
- b.Property("ExecutionTime")
- .HasColumnName("ExecutionTime");
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("MethodName")
- .HasColumnName("MethodName")
- .HasMaxLength(128);
-
- b.Property("Parameters")
- .HasColumnName("Parameters")
- .HasMaxLength(2000);
-
- b.Property("ServiceName")
- .HasColumnName("ServiceName")
- .HasMaxLength(256);
-
- b.Property("TenantId");
-
- b.HasKey("Id");
-
- b.HasIndex("AuditLogId");
-
- b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime");
-
- b.ToTable("AbpAuditLogActions");
- });
-
- modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("AuditLogId")
- .HasColumnName("AuditLogId");
-
- b.Property("ChangeTime")
- .HasColumnName("ChangeTime");
-
- b.Property("ChangeType")
- .HasColumnName("ChangeType");
-
- b.Property("EntityId")
- .IsRequired()
- .HasColumnName("EntityId")
- .HasMaxLength(128);
-
- b.Property("EntityTenantId");
-
- b.Property("EntityTypeFullName")
- .IsRequired()
- .HasColumnName("EntityTypeFullName")
- .HasMaxLength(128);
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("TenantId")
- .HasColumnName("TenantId");
-
- b.HasKey("Id");
-
- b.HasIndex("AuditLogId");
-
- b.HasIndex("TenantId", "EntityTypeFullName", "EntityId");
-
- b.ToTable("AbpEntityChanges");
- });
-
- modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("EntityChangeId");
-
- b.Property("NewValue")
- .HasColumnName("NewValue")
- .HasMaxLength(512);
-
- b.Property("OriginalValue")
- .HasColumnName("OriginalValue")
- .HasMaxLength(512);
-
- b.Property("PropertyName")
- .IsRequired()
- .HasColumnName("PropertyName")
- .HasMaxLength(128);
-
- b.Property("PropertyTypeFullName")
- .IsRequired()
- .HasColumnName("PropertyTypeFullName")
- .HasMaxLength(64);
-
- b.Property("TenantId");
-
- b.HasKey("Id");
-
- b.HasIndex("EntityChangeId");
-
- b.ToTable("AbpEntityPropertyChanges");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ConcurrencyStamp")
- .IsConcurrencyToken()
- .IsRequired()
- .HasColumnName("ConcurrencyStamp")
- .HasMaxLength(256);
-
- b.Property("Description")
- .HasMaxLength(256);
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("IsStatic");
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("Regex")
- .HasMaxLength(512);
-
- b.Property("RegexDescription")
- .HasMaxLength(128);
-
- b.Property("Required");
-
- b.Property("ValueType");
-
- b.HasKey("Id");
-
- b.ToTable("AbpClaimTypes");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ConcurrencyStamp")
- .IsConcurrencyToken()
- .IsRequired()
- .HasColumnName("ConcurrencyStamp")
- .HasMaxLength(256);
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("IsDefault")
- .HasColumnName("IsDefault");
-
- b.Property("IsPublic")
- .HasColumnName("IsPublic");
-
- b.Property("IsStatic")
- .HasColumnName("IsStatic");
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("NormalizedName")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("TenantId");
-
- b.HasKey("Id");
-
- b.HasIndex("NormalizedName");
-
- b.ToTable("AbpRoles");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ClaimType")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("ClaimValue")
- .HasMaxLength(1024);
-
- b.Property("RoleId");
-
- b.Property("TenantId");
-
- b.HasKey("Id");
-
- b.HasIndex("RoleId");
-
- b.ToTable("AbpRoleClaims");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("AccessFailedCount")
- .ValueGeneratedOnAdd()
- .HasColumnName("AccessFailedCount")
- .HasDefaultValue(0);
-
- b.Property("ConcurrencyStamp")
- .IsConcurrencyToken()
- .HasColumnName("ConcurrencyStamp");
-
- b.Property("CreationTime")
- .HasColumnName("CreationTime");
-
- b.Property("CreatorId")
- .HasColumnName("CreatorId");
-
- b.Property("DeleterId")
- .HasColumnName("DeleterId");
-
- b.Property("DeletionTime")
- .HasColumnName("DeletionTime");
-
- b.Property("Email")
- .HasColumnName("Email")
- .HasMaxLength(256);
-
- b.Property("EmailConfirmed")
- .ValueGeneratedOnAdd()
- .HasColumnName("EmailConfirmed")
- .HasDefaultValue(false);
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("IsDeleted")
- .ValueGeneratedOnAdd()
- .HasColumnName("IsDeleted")
- .HasDefaultValue(false);
-
- b.Property("LastModificationTime")
- .HasColumnName("LastModificationTime");
-
- b.Property("LastModifierId")
- .HasColumnName("LastModifierId");
-
- b.Property("LockoutEnabled")
- .ValueGeneratedOnAdd()
- .HasColumnName("LockoutEnabled")
- .HasDefaultValue(false);
-
- b.Property("LockoutEnd");
-
- b.Property("Name")
- .HasColumnName("Name")
- .HasMaxLength(64);
-
- b.Property("NormalizedEmail")
- .HasColumnName("NormalizedEmail")
- .HasMaxLength(256);
-
- b.Property("NormalizedUserName")
- .IsRequired()
- .HasColumnName("NormalizedUserName")
- .HasMaxLength(256);
-
- b.Property("PasswordHash")
- .HasColumnName("PasswordHash")
- .HasMaxLength(256);
-
- b.Property("PhoneNumber")
- .HasColumnName("PhoneNumber")
- .HasMaxLength(16);
-
- b.Property("PhoneNumberConfirmed")
- .ValueGeneratedOnAdd()
- .HasColumnName("PhoneNumberConfirmed")
- .HasDefaultValue(false);
-
- b.Property("SecurityStamp")
- .IsRequired()
- .HasColumnName("SecurityStamp")
- .HasMaxLength(256);
-
- b.Property("Surname")
- .HasColumnName("Surname")
- .HasMaxLength(64);
-
- b.Property("TenantId")
- .HasColumnName("TenantId");
-
- b.Property("TwoFactorEnabled")
- .ValueGeneratedOnAdd()
- .HasColumnName("TwoFactorEnabled")
- .HasDefaultValue(false);
-
- b.Property("UserName")
- .IsRequired()
- .HasColumnName("UserName")
- .HasMaxLength(256);
-
- b.HasKey("Id");
-
- b.HasIndex("Email");
-
- b.HasIndex("NormalizedEmail");
-
- b.HasIndex("NormalizedUserName");
-
- b.HasIndex("UserName");
-
- b.ToTable("AbpUsers");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ClaimType")
- .IsRequired()
- .HasMaxLength(256);
-
- b.Property("ClaimValue")
- .HasMaxLength(1024);
-
- b.Property("TenantId");
-
- b.Property("UserId");
-
- b.HasKey("Id");
-
- b.HasIndex("UserId");
-
- b.ToTable("AbpUserClaims");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b =>
- {
- b.Property("UserId");
-
- b.Property("LoginProvider")
- .HasMaxLength(64);
-
- b.Property("ProviderDisplayName")
- .HasMaxLength(128);
-
- b.Property("ProviderKey")
- .IsRequired()
- .HasMaxLength(196);
-
- b.Property("TenantId");
-
- b.HasKey("UserId", "LoginProvider");
-
- b.HasIndex("LoginProvider", "ProviderKey");
-
- b.ToTable("AbpUserLogins");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b =>
- {
- b.Property("UserId");
-
- b.Property("RoleId");
-
- b.Property("TenantId");
-
- b.HasKey("UserId", "RoleId");
-
- b.HasIndex("RoleId", "UserId");
-
- b.ToTable("AbpUserRoles");
- });
-
- modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b =>
- {
- b.Property("UserId");
-
- b.Property("LoginProvider")
- .HasMaxLength(64);
-
- b.Property("Name")
- .HasMaxLength(128);
-
- b.Property("TenantId");
-
- b.Property("Value");
-
- b.HasKey("UserId", "LoginProvider", "Name");
-
- b.ToTable("AbpUserTokens");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ConcurrencyStamp");
-
- b.Property("CreationTime")
- .HasColumnName("CreationTime");
-
- b.Property("CreatorId")
- .HasColumnName("CreatorId");
-
- b.Property("DeleterId")
- .HasColumnName("DeleterId");
-
- b.Property("DeletionTime")
- .HasColumnName("DeletionTime");
-
- b.Property("Description")
- .HasMaxLength(1000);
-
- b.Property("DisplayName")
- .HasMaxLength(200);
-
- b.Property("Enabled");
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("IsDeleted")
- .ValueGeneratedOnAdd()
- .HasColumnName("IsDeleted")
- .HasDefaultValue(false);
-
- b.Property("LastModificationTime")
- .HasColumnName("LastModificationTime");
-
- b.Property("LastModifierId")
- .HasColumnName("LastModifierId");
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(200);
-
- b.HasKey("Id");
-
- b.ToTable("IdentityServerApiResources");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b =>
- {
- b.Property("ApiResourceId");
-
- b.Property("Type")
- .HasMaxLength(196);
-
- b.HasKey("ApiResourceId", "Type");
-
- b.ToTable("IdentityServerApiClaims");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b =>
- {
- b.Property("ApiResourceId");
-
- b.Property("Name")
- .HasMaxLength(196);
-
- b.Property("Description")
- .HasMaxLength(256);
-
- b.Property("DisplayName")
- .HasMaxLength(128);
-
- b.Property("Emphasize");
-
- b.Property("Required");
-
- b.Property("ShowInDiscoveryDocument");
-
- b.HasKey("ApiResourceId", "Name");
-
- b.ToTable("IdentityServerApiScopes");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b =>
- {
- b.Property("ApiResourceId");
-
- b.Property("Name")
- .HasMaxLength(196);
-
- b.Property("Type")
- .HasMaxLength(196);
-
- b.HasKey("ApiResourceId", "Name", "Type");
-
- b.ToTable("IdentityServerApiScopeClaims");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b =>
- {
- b.Property("ApiResourceId");
-
- b.Property("Type")
- .HasMaxLength(32);
-
- b.Property("Value")
- .HasMaxLength(196);
-
- b.Property("Description")
- .HasMaxLength(256);
-
- b.Property("Expiration");
-
- b.HasKey("ApiResourceId", "Type", "Value");
-
- b.ToTable("IdentityServerApiSecrets");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("AbsoluteRefreshTokenLifetime");
-
- b.Property("AccessTokenLifetime");
-
- b.Property("AccessTokenType");
-
- b.Property("AllowAccessTokensViaBrowser");
-
- b.Property("AllowOfflineAccess");
-
- b.Property("AllowPlainTextPkce");
-
- b.Property("AllowRememberConsent");
-
- b.Property("AlwaysIncludeUserClaimsInIdToken");
-
- b.Property("AlwaysSendClientClaims");
-
- b.Property("AuthorizationCodeLifetime");
-
- b.Property("BackChannelLogoutSessionRequired");
-
- b.Property("BackChannelLogoutUri")
- .HasMaxLength(300);
-
- b.Property("ClientClaimsPrefix")
- .HasMaxLength(200);
-
- b.Property("ClientId")
- .IsRequired()
- .HasMaxLength(200);
-
- b.Property("ClientName")
- .HasMaxLength(200);
-
- b.Property("ClientUri")
- .HasMaxLength(300);
-
- b.Property("ConcurrencyStamp");
-
- b.Property("ConsentLifetime");
-
- b.Property("CreationTime")
- .HasColumnName("CreationTime");
-
- b.Property("CreatorId")
- .HasColumnName("CreatorId");
-
- b.Property("DeleterId")
- .HasColumnName("DeleterId");
-
- b.Property("DeletionTime")
- .HasColumnName("DeletionTime");
-
- b.Property("Description")
- .HasMaxLength(1000);
-
- b.Property("EnableLocalLogin");
-
- b.Property("Enabled");
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("FrontChannelLogoutSessionRequired");
-
- b.Property("FrontChannelLogoutUri")
- .HasMaxLength(300);
-
- b.Property("IdentityTokenLifetime");
-
- b.Property("IncludeJwtId");
-
- b.Property("IsDeleted")
- .ValueGeneratedOnAdd()
- .HasColumnName("IsDeleted")
- .HasDefaultValue(false);
-
- b.Property("LastModificationTime")
- .HasColumnName("LastModificationTime");
-
- b.Property("LastModifierId")
- .HasColumnName("LastModifierId");
-
- b.Property("LogoUri")
- .HasMaxLength(300);
-
- b.Property("PairWiseSubjectSalt")
- .HasMaxLength(200);
-
- b.Property("ProtocolType")
- .IsRequired()
- .HasMaxLength(200);
-
- b.Property("RefreshTokenExpiration");
-
- b.Property("RefreshTokenUsage");
-
- b.Property("RequireClientSecret");
-
- b.Property("RequireConsent");
-
- b.Property("RequirePkce");
-
- b.Property("SlidingRefreshTokenLifetime");
-
- b.Property("UpdateAccessTokenClaimsOnRefresh");
-
- b.HasKey("Id");
-
- b.HasIndex("ClientId")
- .IsUnique();
-
- b.ToTable("IdentityServerClients");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b =>
- {
- b.Property("ClientId");
-
- b.Property("Type")
- .HasMaxLength(250);
-
- b.Property("Value")
- .HasMaxLength(250);
-
- b.HasKey("ClientId", "Type", "Value");
-
- b.ToTable("IdentityServerClientClaims");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b =>
- {
- b.Property("ClientId");
-
- b.Property("Origin")
- .HasMaxLength(150);
-
- b.HasKey("ClientId", "Origin");
-
- b.ToTable("IdentityServerClientCorsOrigins");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b =>
- {
- b.Property("ClientId");
-
- b.Property("GrantType")
- .HasMaxLength(196);
-
- b.HasKey("ClientId", "GrantType");
-
- b.ToTable("IdentityServerClientGrantTypes");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b =>
- {
- b.Property("ClientId");
-
- b.Property("Provider")
- .HasMaxLength(64);
-
- b.HasKey("ClientId", "Provider");
-
- b.ToTable("IdentityServerClientIdPRestrictions");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b =>
- {
- b.Property("ClientId");
-
- b.Property("PostLogoutRedirectUri")
- .HasMaxLength(200);
-
- b.HasKey("ClientId", "PostLogoutRedirectUri");
-
- b.ToTable("IdentityServerClientPostLogoutRedirectUris");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b =>
- {
- b.Property("ClientId");
-
- b.Property("Key")
- .HasMaxLength(64);
-
- b.Property("Value")
- .IsRequired()
- .HasMaxLength(128);
-
- b.HasKey("ClientId", "Key");
-
- b.ToTable("IdentityServerClientProperties");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b =>
- {
- b.Property("ClientId");
-
- b.Property("RedirectUri")
- .HasMaxLength(200);
-
- b.HasKey("ClientId", "RedirectUri");
-
- b.ToTable("IdentityServerClientRedirectUris");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b =>
- {
- b.Property("ClientId");
-
- b.Property("Scope")
- .HasMaxLength(196);
-
- b.HasKey("ClientId", "Scope");
-
- b.ToTable("IdentityServerClientScopes");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b =>
- {
- b.Property("ClientId");
-
- b.Property("Type")
- .HasMaxLength(32);
-
- b.Property("Value")
- .HasMaxLength(196);
-
- b.Property("Description")
- .HasMaxLength(256);
-
- b.Property("Expiration");
-
- b.HasKey("ClientId", "Type", "Value");
-
- b.ToTable("IdentityServerClientSecrets");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b =>
- {
- b.Property("Key")
- .HasMaxLength(200);
-
- b.Property("ClientId")
- .IsRequired()
- .HasMaxLength(200);
-
- b.Property("ConcurrencyStamp");
-
- b.Property("CreationTime");
-
- b.Property("Data")
- .IsRequired();
-
- b.Property("Expiration");
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("Id");
-
- b.Property("SubjectId")
- .HasMaxLength(200);
-
- b.Property("Type")
- .IsRequired()
- .HasMaxLength(50);
-
- b.HasKey("Key");
-
- b.HasIndex("SubjectId", "ClientId", "Type");
-
- b.ToTable("IdentityServerPersistedGrants");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b =>
- {
- b.Property("IdentityResourceId");
-
- b.Property("Type")
- .HasMaxLength(196);
-
- b.HasKey("IdentityResourceId", "Type");
-
- b.ToTable("IdentityServerIdentityClaims");
- });
-
- modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("ConcurrencyStamp");
-
- b.Property("CreationTime")
- .HasColumnName("CreationTime");
-
- b.Property("CreatorId")
- .HasColumnName("CreatorId");
-
- b.Property("DeleterId")
- .HasColumnName("DeleterId");
-
- b.Property("DeletionTime")
- .HasColumnName("DeletionTime");
-
- b.Property("Description")
- .HasMaxLength(1000);
-
- b.Property("DisplayName")
- .HasMaxLength(200);
-
- b.Property("Emphasize");
-
- b.Property("Enabled");
-
- b.Property("ExtraProperties")
- .HasColumnName("ExtraProperties");
-
- b.Property("IsDeleted")
- .ValueGeneratedOnAdd()
- .HasColumnName("IsDeleted")
- .HasDefaultValue(false);
-
- b.Property("LastModificationTime")
- .HasColumnName("LastModificationTime");
-
- b.Property("LastModifierId")
- .HasColumnName("LastModifierId");
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(200);
-
- b.Property("Required");
-
- b.Property("ShowInDiscoveryDocument");
-
- b.HasKey("Id");
-
- b.ToTable("IdentityServerIdentityResources");
- });
-
- modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd();
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(128);
-
- b.Property("ProviderKey")
- .IsRequired()
- .HasMaxLength(64);
-
- b.Property("ProviderName")
- .IsRequired()
- .HasMaxLength(64);
-
- b.Property("TenantId");
-
- b.HasKey("Id");
-
- b.HasIndex("Name", "ProviderName", "ProviderKey");
-
- b.ToTable("AbpPermissionGrants");
- });
-
- modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b =>
- {
- b.Property