-
diff --git a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts
new file mode 100644
index 0000000000..562f312eca
--- /dev/null
+++ b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts
@@ -0,0 +1,28 @@
+import { Component, TrackByFunction, OnInit } from '@angular/core';
+import { SettingTab, SETTING_TABS } from '@abp/ng.theme.shared';
+import { Router } from '@angular/router';
+import { Store } from '@ngxs/store';
+import { ConfigState } from '@abp/ng.core';
+
+@Component({
+ selector: 'abp-setting-management',
+ templateUrl: './setting-management.component.html',
+})
+export class SettingManagementComponent implements OnInit {
+ settings: SettingTab[] = [];
+
+ selected = {} as SettingTab;
+
+ trackByFn: TrackByFunction
= (_, item) => item.name;
+
+ constructor(private router: Router, private store: Store) {}
+
+ ngOnInit() {
+ if (this.settings.length) {
+ this.settings = SETTING_TABS.filter(setting =>
+ this.store.selectSnapshot(ConfigState.getGrantedPolicy(setting.requiredPolicy)),
+ ).sort((a, b) => a.order - b.order);
+ this.selected = this.settings[0];
+ }
+ }
+}
diff --git a/npm/ng-packs/packages/setting-management/src/lib/constants/index.ts b/npm/ng-packs/packages/setting-management/src/lib/constants/index.ts
deleted file mode 100644
index a3820983e2..0000000000
--- a/npm/ng-packs/packages/setting-management/src/lib/constants/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './routes';
diff --git a/npm/ng-packs/packages/setting-management/src/lib/constants/routes.ts b/npm/ng-packs/packages/setting-management/src/lib/constants/routes.ts
deleted file mode 100644
index 3f47c95eb7..0000000000
--- a/npm/ng-packs/packages/setting-management/src/lib/constants/routes.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { ABP, eLayoutType } from '@abp/ng.core';
-
-export const SETTING_MANAGEMENT_ROUTES = {
- routes: [
- {
- name: 'Settings',
- path: 'setting-management',
- parentName: 'AbpUiNavigation::Menu:Administration',
- layout: eLayoutType.application,
- order: 6,
- iconClass: 'fa fa-cog',
- },
- ] as ABP.FullRoute[],
-};
diff --git a/npm/ng-packs/packages/setting-management/src/lib/services/setting-management.service.ts b/npm/ng-packs/packages/setting-management/src/lib/services/setting-management.service.ts
deleted file mode 100644
index 79878b1717..0000000000
--- a/npm/ng-packs/packages/setting-management/src/lib/services/setting-management.service.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { SettingTab } from '@abp/ng.theme.shared';
-import { Injectable } from '@angular/core';
-import { Router } from '@angular/router';
-import { Navigate } from '@ngxs/router-plugin';
-import { Store, Actions, ofActionSuccessful } from '@ngxs/store';
-import { Subject } from 'rxjs';
-import { ConfigState, GetAppConfiguration } from '@abp/ng.core';
-import { OAuthService } from 'angular-oauth2-oidc';
-import { takeUntil } from 'rxjs/operators';
-
-@Injectable({ providedIn: 'root' })
-export class SettingManagementService {
- settings: SettingTab[] = [];
-
- selected = {} as SettingTab;
-
- private destroy$ = new Subject();
-
- constructor(
- private actions: Actions,
- private router: Router,
- private store: Store,
- private oAuthService: OAuthService,
- ) {
- setTimeout(() => this.setSettings(), 0);
-
- this.actions
- .pipe(ofActionSuccessful(GetAppConfiguration))
- .pipe(takeUntil(this.destroy$))
- .subscribe(() => {
- if (this.oAuthService.hasValidAccessToken()) {
- this.setSettings();
- }
- });
- }
-
- ngOnDestroy() {
- this.destroy$.next();
- }
-
- setSettings() {
- const route = this.router.config.find(r => r.path === 'setting-management');
- this.settings = (route.data.settings as SettingTab[])
- .filter(setting => this.store.selectSnapshot(ConfigState.getGrantedPolicy(setting.requiredPolicy)))
- .sort((a, b) => a.order - b.order);
- this.checkSelected();
- }
-
- checkSelected() {
- this.selected = this.settings.find(setting => setting.url === this.router.url) || ({} as SettingTab);
-
- if (!this.selected.name && this.settings.length) {
- this.setSelected(this.settings[0]);
- }
- }
-
- setSelected(selected: SettingTab) {
- this.selected = selected;
- this.store.dispatch(new Navigate([selected.url]));
- }
-}
diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts
index e401df16de..d1cb780777 100644
--- a/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts
+++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts
@@ -1,15 +1,13 @@
-import { DynamicLayoutComponent } from '@abp/ng.core';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
-import { SETTING_MANAGEMENT_ROUTES } from './constants/routes';
-import { SettingLayoutComponent } from './components/setting-layout.component';
+import { SettingManagementComponent } from './components/setting-management.component';
+import { DynamicLayoutComponent } from '@abp/ng.core';
const routes: Routes = [
{
- path: 'setting-management',
+ path: '',
component: DynamicLayoutComponent,
- children: [{ path: '', component: SettingLayoutComponent }],
- data: { routes: SETTING_MANAGEMENT_ROUTES, settings: [] },
+ children: [{ path: '', component: SettingManagementComponent }],
},
];
diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts
index b3959e6650..397c581587 100644
--- a/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts
+++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts
@@ -1,14 +1,11 @@
import { CoreModule } from '@abp/ng.core';
import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { NgModule } from '@angular/core';
-import { SettingLayoutComponent } from './components/setting-layout.component';
import { SettingManagementRoutingModule } from './setting-management-routing.module';
-
-export const SETTING_LAYOUT = SettingLayoutComponent;
+import { SettingManagementComponent } from './components/setting-management.component';
@NgModule({
- declarations: [SETTING_LAYOUT],
+ declarations: [SettingManagementComponent],
imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule],
- entryComponents: [SETTING_LAYOUT],
})
export class SettingManagementModule {}
diff --git a/npm/ng-packs/packages/setting-management/src/public-api.ts b/npm/ng-packs/packages/setting-management/src/public-api.ts
index 5343d9e457..8027d769f9 100644
--- a/npm/ng-packs/packages/setting-management/src/public-api.ts
+++ b/npm/ng-packs/packages/setting-management/src/public-api.ts
@@ -1,3 +1,2 @@
export * from './lib/setting-management.module';
-export * from './lib/constants';
-export * from './lib/components/setting-layout.component';
+export * from './lib/components/setting-management.component';
diff --git a/npm/ng-packs/packages/tenant-management-config/README.md b/npm/ng-packs/packages/tenant-management-config/README.md
new file mode 100644
index 0000000000..77548feaf9
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/README.md
@@ -0,0 +1 @@
+# @abp/ng.tenant-management.config
\ No newline at end of file
diff --git a/npm/ng-packs/packages/tenant-management-config/karma.conf.js b/npm/ng-packs/packages/tenant-management-config/karma.conf.js
new file mode 100644
index 0000000000..850929cc06
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/karma.conf.js
@@ -0,0 +1,32 @@
+// Karma configuration file, see link for more information
+// https://karma-runner.github.io/1.0/config/configuration-file.html
+
+module.exports = function (config) {
+ config.set({
+ basePath: '',
+ frameworks: ['jasmine', '@angular-devkit/build-angular'],
+ plugins: [
+ require('karma-jasmine'),
+ require('karma-chrome-launcher'),
+ require('karma-jasmine-html-reporter'),
+ require('karma-coverage-istanbul-reporter'),
+ require('@angular-devkit/build-angular/plugins/karma')
+ ],
+ client: {
+ clearContext: false // leave Jasmine Spec Runner output visible in browser
+ },
+ coverageIstanbulReporter: {
+ dir: require('path').join(__dirname, '../../coverage/tenant-management-config'),
+ reports: ['html', 'lcovonly', 'text-summary'],
+ fixWebpackSourcePaths: true
+ },
+ reporters: ['progress', 'kjhtml'],
+ port: 9876,
+ colors: true,
+ logLevel: config.LOG_INFO,
+ autoWatch: true,
+ browsers: ['Chrome'],
+ singleRun: false,
+ restartOnFileChange: true
+ });
+};
diff --git a/npm/ng-packs/packages/tenant-management-config/ng-package.json b/npm/ng-packs/packages/tenant-management-config/ng-package.json
new file mode 100644
index 0000000000..834556113c
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/ng-package.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
+ "dest": "../../dist/tenant-management-config",
+ "lib": {
+ "entryFile": "src/public-api.ts"
+ }
+}
\ No newline at end of file
diff --git a/npm/ng-packs/packages/tenant-management-config/package.json b/npm/ng-packs/packages/tenant-management-config/package.json
new file mode 100644
index 0000000000..43b4392733
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "@abp/ng.tenant-management.config",
+ "version": "0.0.1",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/npm/ng-packs/packages/tenant-management-config/src/lib/services/tenant-management-config.service.ts b/npm/ng-packs/packages/tenant-management-config/src/lib/services/tenant-management-config.service.ts
new file mode 100644
index 0000000000..8d77d1005f
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/src/lib/services/tenant-management-config.service.ts
@@ -0,0 +1,25 @@
+import { Injectable } from '@angular/core';
+import { ABP_ROUTES, eLayoutType } from '@abp/ng.core';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class TenantManagementConfigService {
+ constructor() {
+ ABP_ROUTES.push({
+ name: 'AbpTenantManagement::Menu:TenantManagement',
+ path: 'tenant-management',
+ parentName: 'AbpUiNavigation::Menu:Administration',
+ layout: eLayoutType.application,
+ iconClass: 'fa fa-users',
+ children: [
+ {
+ path: 'tenants',
+ name: 'AbpTenantManagement::Tenants',
+ order: 1,
+ requiredPolicy: 'AbpTenantManagement.Tenants',
+ },
+ ],
+ });
+ }
+}
diff --git a/npm/ng-packs/packages/tenant-management-config/src/lib/tenant-management-config.module.ts b/npm/ng-packs/packages/tenant-management-config/src/lib/tenant-management-config.module.ts
new file mode 100644
index 0000000000..7f59d28be4
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/src/lib/tenant-management-config.module.ts
@@ -0,0 +1,8 @@
+import { NgModule, APP_INITIALIZER } from '@angular/core';
+import { TenantManagementConfigService } from './services/tenant-management-config.service';
+import { noop } from '@abp/ng.core';
+
+@NgModule({
+ providers: [{ provide: APP_INITIALIZER, deps: [TenantManagementConfigService], useFactory: noop, multi: true }],
+})
+export class TenantManagementConfigModule {}
diff --git a/npm/ng-packs/packages/tenant-management-config/src/public-api.ts b/npm/ng-packs/packages/tenant-management-config/src/public-api.ts
new file mode 100644
index 0000000000..a6d21694db
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/src/public-api.ts
@@ -0,0 +1,2 @@
+export * from './lib/services/tenant-management-config.service';
+export * from './lib/tenant-management-config.module';
diff --git a/npm/ng-packs/packages/tenant-management-config/src/test.ts b/npm/ng-packs/packages/tenant-management-config/src/test.ts
new file mode 100644
index 0000000000..978c64fb83
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/src/test.ts
@@ -0,0 +1,21 @@
+// This file is required by karma.conf.js and loads recursively all the .spec and framework files
+
+import 'zone.js/dist/zone';
+import 'zone.js/dist/zone-testing';
+import { getTestBed } from '@angular/core/testing';
+import {
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting
+} from '@angular/platform-browser-dynamic/testing';
+
+declare const require: any;
+
+// First, initialize the Angular testing environment.
+getTestBed().initTestEnvironment(
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting()
+);
+// Then we find all the tests.
+const context = require.context('./', true, /\.spec\.ts$/);
+// And load the modules.
+context.keys().map(context);
diff --git a/npm/ng-packs/packages/tenant-management-config/tsconfig.lib.json b/npm/ng-packs/packages/tenant-management-config/tsconfig.lib.json
new file mode 100644
index 0000000000..bd23948e59
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/tsconfig.lib.json
@@ -0,0 +1,26 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../out-tsc/lib",
+ "target": "es2015",
+ "declaration": true,
+ "inlineSources": true,
+ "types": [],
+ "lib": [
+ "dom",
+ "es2018"
+ ]
+ },
+ "angularCompilerOptions": {
+ "annotateForClosureCompiler": true,
+ "skipTemplateCodegen": true,
+ "strictMetadataEmit": true,
+ "fullTemplateTypeCheck": true,
+ "strictInjectionParameters": true,
+ "enableResourceInlining": true
+ },
+ "exclude": [
+ "src/test.ts",
+ "**/*.spec.ts"
+ ]
+}
diff --git a/npm/ng-packs/packages/tenant-management-config/tsconfig.spec.json b/npm/ng-packs/packages/tenant-management-config/tsconfig.spec.json
new file mode 100644
index 0000000000..16da33db07
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/tsconfig.spec.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../out-tsc/spec",
+ "types": [
+ "jasmine",
+ "node"
+ ]
+ },
+ "files": [
+ "src/test.ts"
+ ],
+ "include": [
+ "**/*.spec.ts",
+ "**/*.d.ts"
+ ]
+}
diff --git a/npm/ng-packs/packages/tenant-management-config/tslint.json b/npm/ng-packs/packages/tenant-management-config/tslint.json
new file mode 100644
index 0000000000..8c3919ea62
--- /dev/null
+++ b/npm/ng-packs/packages/tenant-management-config/tslint.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../../tslint.json",
+ "rules": {
+ "directive-selector": [
+ true,
+ "attribute",
+ "abp",
+ "camelCase"
+ ],
+ "component-selector": [
+ true,
+ "element",
+ "abp",
+ "kebab-case"
+ ]
+ }
+}
diff --git a/npm/ng-packs/packages/tenant-management/ng-package.json b/npm/ng-packs/packages/tenant-management/ng-package.json
index 07fbab773b..959eae44ab 100644
--- a/npm/ng-packs/packages/tenant-management/ng-package.json
+++ b/npm/ng-packs/packages/tenant-management/ng-package.json
@@ -4,5 +4,9 @@
"lib": {
"entryFile": "src/public-api.ts"
},
- "whitelistedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.feature-management"]
+ "whitelistedNonPeerDependencies": [
+ "@abp/ng.theme.shared",
+ "@abp/ng.feature-management",
+ "@abp/ng.tenant-management.config"
+ ]
}
diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json
index 8f59b9179d..c1b3909534 100644
--- a/npm/ng-packs/packages/tenant-management/package.json
+++ b/npm/ng-packs/packages/tenant-management/package.json
@@ -3,7 +3,8 @@
"version": "0.9.0",
"dependencies": {
"@abp/ng.theme.shared": "^0.9.0",
- "@abp/ng.feature-management": "^0.9.0"
+ "@abp/ng.feature-management": "^0.9.0",
+ "@abp/ng.tenant-management.config": "^0.0.1"
},
"publishConfig": {
"access": "public"
diff --git a/npm/ng-packs/packages/tenant-management/src/lib/constants/routes.ts b/npm/ng-packs/packages/tenant-management/src/lib/constants/routes.ts
index 5aad33a3c4..ad919c8ee1 100644
--- a/npm/ng-packs/packages/tenant-management/src/lib/constants/routes.ts
+++ b/npm/ng-packs/packages/tenant-management/src/lib/constants/routes.ts
@@ -1,5 +1,9 @@
import { ABP, eLayoutType } from '@abp/ng.core';
+/**
+ *
+ * @deprecated since version 0.9.0
+ */
export const TENANT_MANAGEMENT_ROUTES = {
routes: [
{
diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts
index f8a258da3b..5ab4f20716 100644
--- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts
+++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts
@@ -25,6 +25,10 @@ import { NgxValidateCoreModule } from '@ngx-validate/core';
})
export class TenantManagementModule {}
+/**
+ *
+ * @deprecated since version 0.9.0
+ */
export function TenantManagementProviders(): Provider[] {
return [];
}
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts b/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts
index 0388f3b51c..9e9203cff3 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts
+++ b/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts
@@ -154,6 +154,10 @@ export default `
z-index: 1000;
}
+.color-white {
+ color: #FFF !important;
+}
+
/* ;
name: string;
order: number;
requiredPolicy?: string;
- url?: string;
}
+
+export const SETTING_TABS = [] as SettingTab[];
diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj b/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj
index d337c3a02d..6330e87867 100644
--- a/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj
+++ b/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj
@@ -12,10 +12,10 @@
-
-
-
-
+
+
+
+
diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/IBookAppService.cs b/samples/BookStore/src/Acme.BookStore.Application.Contracts/IBookAppService.cs
index c6609af704..5a17a8f19d 100644
--- a/samples/BookStore/src/Acme.BookStore.Application.Contracts/IBookAppService.cs
+++ b/samples/BookStore/src/Acme.BookStore.Application.Contracts/IBookAppService.cs
@@ -5,7 +5,7 @@ using Volo.Abp.Application.Services;
namespace Acme.BookStore
{
public interface IBookAppService :
- IAsyncCrudAppService< //Defines CRUD methods
+ ICrudAppService< //Defines CRUD methods
BookDto, //Used to show books
Guid, //Primary key of the book entity
PagedAndSortedResultRequestDto, //Used for paging/sorting on getting a list of books
diff --git a/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj b/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj
index 3039911229..7ed9e72b19 100644
--- a/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj
+++ b/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Acme.BookStore
@@ -13,10 +13,10 @@
-
-
-
-
+
+
+
+
diff --git a/samples/BookStore/src/Acme.BookStore.Application/BookAppService.cs b/samples/BookStore/src/Acme.BookStore.Application/BookAppService.cs
index 1d5e844f30..8d9d29468a 100644
--- a/samples/BookStore/src/Acme.BookStore.Application/BookAppService.cs
+++ b/samples/BookStore/src/Acme.BookStore.Application/BookAppService.cs
@@ -6,7 +6,7 @@ using Volo.Abp.Domain.Repositories;
namespace Acme.BookStore
{
public class BookAppService :
- AsyncCrudAppService,
IBookAppService
{
diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj b/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj
index 0b3564a722..7a2aa7a7f3 100644
--- a/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj
+++ b/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj
@@ -4,7 +4,7 @@
Exe
- netcoreapp2.2
+ netcoreapp3.0
@@ -19,14 +19,17 @@
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
-
+
diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj b/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj
index 7d7b23cc95..5ffec7bf7d 100644
--- a/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj
+++ b/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj
@@ -8,14 +8,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj b/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj
index ba3b30099b..0ab6ca3f72 100644
--- a/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj
+++ b/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Acme.BookStore
@@ -13,15 +13,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/samples/BookStore/src/Acme.BookStore.Domain/Book.cs b/samples/BookStore/src/Acme.BookStore.Domain/Book.cs
index 93dd6d9adc..3fe42f0d18 100644
--- a/samples/BookStore/src/Acme.BookStore.Domain/Book.cs
+++ b/samples/BookStore/src/Acme.BookStore.Domain/Book.cs
@@ -12,5 +12,14 @@ namespace Acme.BookStore
public DateTime PublishDate { get; set; }
public float Price { get; set; }
+
+ public Book(Guid id, string name, BookType type, DateTime publishDate, float price)
+ :base(id)
+ {
+ Name = name;
+ Type = type;
+ PublishDate = publishDate;
+ Price = price;
+ }
}
}
\ No newline at end of file
diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj
index 3b0318a10c..6c33a8a98f 100644
--- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj
+++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj
@@ -3,10 +3,14 @@
- netcoreapp2.2
+ netcoreapp3.0
Acme.BookStore
+
+
+
+
diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190924133131_Upgraded_To_Abp_0_21.Designer.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190924133131_Upgraded_To_Abp_0_21.Designer.cs
new file mode 100644
index 0000000000..19111ba49e
--- /dev/null
+++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190924133131_Upgraded_To_Abp_0_21.Designer.cs
@@ -0,0 +1,1743 @@
+//
+using System;
+using Acme.BookStore.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace Acme.BookStore.Migrations
+{
+ [DbContext(typeof(BookStoreMigrationsDbContext))]
+ [Migration("20190924133131_Upgraded_To_Abp_0_21")]
+ partial class Upgraded_To_Abp_0_21
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.0.0")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("Acme.BookStore.Book", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Price")
+ .HasColumnType("real");
+
+ b.Property("PublishDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Type")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("AppBooks");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ApplicationName")
+ .HasColumnName("ApplicationName")
+ .HasColumnType("nvarchar(96)")
+ .HasMaxLength(96);
+
+ b.Property("BrowserInfo")
+ .HasColumnName("BrowserInfo")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("ClientId")
+ .HasColumnName("ClientId")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ClientIpAddress")
+ .HasColumnName("ClientIpAddress")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ClientName")
+ .HasColumnName("ClientName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Comments")
+ .HasColumnName("Comments")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CorrelationId")
+ .HasColumnName("CorrelationId")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("Exceptions")
+ .HasColumnName("Exceptions")
+ .HasColumnType("nvarchar(4000)")
+ .HasMaxLength(4000);
+
+ b.Property("ExecutionDuration")
+ .HasColumnName("ExecutionDuration")
+ .HasColumnType("int");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HttpMethod")
+ .HasColumnName("HttpMethod")
+ .HasColumnType("nvarchar(16)")
+ .HasMaxLength(16);
+
+ b.Property("HttpStatusCode")
+ .HasColumnName("HttpStatusCode")
+ .HasColumnType("int");
+
+ b.Property("ImpersonatorTenantId")
+ .HasColumnName("ImpersonatorTenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ImpersonatorUserId")
+ .HasColumnName("ImpersonatorUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Url")
+ .HasColumnName("Url")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("UserId")
+ .HasColumnName("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UserName")
+ .HasColumnName("UserName")
+ .HasColumnType("nvarchar(256)")
+ .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()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditLogId")
+ .HasColumnName("AuditLogId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ExecutionDuration")
+ .HasColumnName("ExecutionDuration")
+ .HasColumnType("int");
+
+ b.Property("ExecutionTime")
+ .HasColumnName("ExecutionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("MethodName")
+ .HasColumnName("MethodName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Parameters")
+ .HasColumnName("Parameters")
+ .HasColumnType("nvarchar(2000)")
+ .HasMaxLength(2000);
+
+ b.Property("ServiceName")
+ .HasColumnName("ServiceName")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ 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()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditLogId")
+ .HasColumnName("AuditLogId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ChangeTime")
+ .HasColumnName("ChangeTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ChangeType")
+ .HasColumnName("ChangeType")
+ .HasColumnType("tinyint");
+
+ b.Property("EntityId")
+ .IsRequired()
+ .HasColumnName("EntityId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("EntityTenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EntityTypeFullName")
+ .IsRequired()
+ .HasColumnName("EntityTypeFullName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ 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()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EntityChangeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("NewValue")
+ .HasColumnName("NewValue")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("OriginalValue")
+ .HasColumnName("OriginalValue")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("PropertyName")
+ .IsRequired()
+ .HasColumnName("PropertyName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("PropertyTypeFullName")
+ .IsRequired()
+ .HasColumnName("PropertyTypeFullName")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntityChangeId");
+
+ b.ToTable("AbpEntityPropertyChanges");
+ });
+
+ modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsAbandoned")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("JobArgs")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)")
+ .HasMaxLength(1048576);
+
+ b.Property("JobName")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("LastTryTime")
+ .HasColumnType("datetime2");
+
+ b.Property("NextTryTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Priority")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint")
+ .HasDefaultValue((byte)15);
+
+ b.Property("TryCount")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("smallint")
+ .HasDefaultValue((short)0);
+
+ b.HasKey("Id");
+
+ b.HasIndex("IsAbandoned", "NextTryTime");
+
+ b.ToTable("AbpBackgroundJobs");
+ });
+
+ modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ProviderKey")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ProviderName")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("Value")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name", "ProviderName", "ProviderKey");
+
+ b.ToTable("AbpFeatureValues");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .IsRequired()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsStatic")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("Regex")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("RegexDescription")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Required")
+ .HasColumnType("bit");
+
+ b.Property("ValueType")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("AbpClaimTypes");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .IsRequired()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsDefault")
+ .HasColumnName("IsDefault")
+ .HasColumnType("bit");
+
+ b.Property("IsPublic")
+ .HasColumnName("IsPublic")
+ .HasColumnType("bit");
+
+ b.Property("IsStatic")
+ .HasColumnName("IsStatic")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("NormalizedName")
+ .IsRequired()
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName");
+
+ b.ToTable("AbpRoles");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClaimType")
+ .IsRequired()
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(1024)")
+ .HasMaxLength(1024);
+
+ b.Property("RoleId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AbpRoleClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AccessFailedCount")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("AccessFailedCount")
+ .HasColumnType("int")
+ .HasDefaultValue(0);
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Email")
+ .HasColumnName("Email")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("EmailConfirmed")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("EmailConfirmed")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("LockoutEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("LockoutEnabled")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LockoutEnd")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("Name")
+ .HasColumnName("Name")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("NormalizedEmail")
+ .HasColumnName("NormalizedEmail")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("NormalizedUserName")
+ .IsRequired()
+ .HasColumnName("NormalizedUserName")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("PasswordHash")
+ .HasColumnName("PasswordHash")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("PhoneNumber")
+ .HasColumnName("PhoneNumber")
+ .HasColumnType("nvarchar(16)")
+ .HasMaxLength(16);
+
+ b.Property("PhoneNumberConfirmed")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("PhoneNumberConfirmed")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("SecurityStamp")
+ .IsRequired()
+ .HasColumnName("SecurityStamp")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("Surname")
+ .HasColumnName("Surname")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TwoFactorEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("TwoFactorEnabled")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("UserName")
+ .IsRequired()
+ .HasColumnName("UserName")
+ .HasColumnType("nvarchar(256)")
+ .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")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClaimType")
+ .IsRequired()
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(1024)")
+ .HasMaxLength(1024);
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AbpUserClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ProviderDisplayName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ProviderKey")
+ .IsRequired()
+ .HasColumnType("nvarchar(196)")
+ .HasMaxLength(196);
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("UserId", "LoginProvider");
+
+ b.HasIndex("LoginProvider", "ProviderKey");
+
+ b.ToTable("AbpUserLogins");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RoleId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId", "UserId");
+
+ b.ToTable("AbpUserRoles");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AbpUserTokens");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(1000)")
+ .HasMaxLength(1000);
+
+ b.Property("DisplayName")
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.Property("Enabled")
+ .HasColumnType("bit");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.Property("Properties")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("IdentityServerApiResources");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Type")
+ .HasColumnType("nvarchar(196)")
+ .HasMaxLength(196);
+
+ b.HasKey("ApiResourceId", "Type");
+
+ b.ToTable("IdentityServerApiClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(196)")
+ .HasMaxLength(196);
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("DisplayName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Emphasize")
+ .HasColumnType("bit");
+
+ b.Property("Required")
+ .HasColumnType("bit");
+
+ b.Property("ShowInDiscoveryDocument")
+ .HasColumnType("bit");
+
+ b.HasKey("ApiResourceId", "Name");
+
+ b.ToTable("IdentityServerApiScopes");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(196)")
+ .HasMaxLength(196);
+
+ b.Property("Type")
+ .HasColumnType("nvarchar(196)")
+ .HasMaxLength(196);
+
+ b.HasKey("ApiResourceId", "Name", "Type");
+
+ b.ToTable("IdentityServerApiScopeClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Type")
+ .HasColumnType("nvarchar(32)")
+ .HasMaxLength(32);
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(196)")
+ .HasMaxLength(196);
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("Expiration")
+ .HasColumnType("datetime2");
+
+ b.HasKey("ApiResourceId", "Type", "Value");
+
+ b.ToTable("IdentityServerApiSecrets");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AbsoluteRefreshTokenLifetime")
+ .HasColumnType("int");
+
+ b.Property("AccessTokenLifetime")
+ .HasColumnType("int");
+
+ b.Property("AccessTokenType")
+ .HasColumnType("int");
+
+ b.Property("AllowAccessTokensViaBrowser")
+ .HasColumnType("bit");
+
+ b.Property("AllowOfflineAccess")
+ .HasColumnType("bit");
+
+ b.Property("AllowPlainTextPkce")
+ .HasColumnType("bit");
+
+ b.Property("AllowRememberConsent")
+ .HasColumnType("bit");
+
+ b.Property("AlwaysIncludeUserClaimsInIdToken")
+ .HasColumnType("bit");
+
+ b.Property("AlwaysSendClientClaims")
+ .HasColumnType("bit");
+
+ b.Property("AuthorizationCodeLifetime")
+ .HasColumnType("int");
+
+ b.Property("BackChannelLogoutSessionRequired")
+ .HasColumnType("bit");
+
+ b.Property("BackChannelLogoutUri")
+ .HasColumnType("nvarchar(300)")
+ .HasMaxLength(300);
+
+ b.Property("ClientClaimsPrefix")
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.Property("ClientId")
+ .IsRequired()
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.Property("ClientName")
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.Property("ClientUri")
+ .HasColumnType("nvarchar(300)")
+ .HasMaxLength(300);
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ConsentLifetime")
+ .HasColumnType("int");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(1000)")
+ .HasMaxLength(1000);
+
+ b.Property("DeviceCodeLifetime")
+ .HasColumnType("int");
+
+ b.Property("EnableLocalLogin")
+ .HasColumnType("bit");
+
+ b.Property("Enabled")
+ .HasColumnType("bit");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FrontChannelLogoutSessionRequired")
+ .HasColumnType("bit");
+
+ b.Property("FrontChannelLogoutUri")
+ .HasColumnType("nvarchar(300)")
+ .HasMaxLength(300);
+
+ b.Property("IdentityTokenLifetime")
+ .HasColumnType("int");
+
+ b.Property("IncludeJwtId")
+ .HasColumnType("bit");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("LogoUri")
+ .HasColumnType("nvarchar(300)")
+ .HasMaxLength(300);
+
+ b.Property("PairWiseSubjectSalt")
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.Property("ProtocolType")
+ .IsRequired()
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.Property("RefreshTokenExpiration")
+ .HasColumnType("int");
+
+ b.Property("RefreshTokenUsage")
+ .HasColumnType("int");
+
+ b.Property("RequireClientSecret")
+ .HasColumnType("bit");
+
+ b.Property("RequireConsent")
+ .HasColumnType("bit");
+
+ b.Property("RequirePkce")
+ .HasColumnType("bit");
+
+ b.Property("SlidingRefreshTokenLifetime")
+ .HasColumnType("int");
+
+ b.Property("UpdateAccessTokenClaimsOnRefresh")
+ .HasColumnType("bit");
+
+ b.Property("UserCodeType")
+ .HasColumnType("nvarchar(100)")
+ .HasMaxLength(100);
+
+ b.Property("UserSsoLifetime")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ClientId");
+
+ b.ToTable("IdentityServerClients");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b =>
+ {
+ b.Property("ClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Type")
+ .HasColumnType("nvarchar(250)")
+ .HasMaxLength(250);
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(250)")
+ .HasMaxLength(250);
+
+ b.HasKey("ClientId", "Type", "Value");
+
+ b.ToTable("IdentityServerClientClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b =>
+ {
+ b.Property("ClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Origin")
+ .HasColumnType("nvarchar(150)")
+ .HasMaxLength(150);
+
+ b.HasKey("ClientId", "Origin");
+
+ b.ToTable("IdentityServerClientCorsOrigins");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b =>
+ {
+ b.Property("ClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("GrantType")
+ .HasColumnType("nvarchar(196)")
+ .HasMaxLength(196);
+
+ b.HasKey("ClientId", "GrantType");
+
+ b.ToTable("IdentityServerClientGrantTypes");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b =>
+ {
+ b.Property("ClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Provider")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.HasKey("ClientId", "Provider");
+
+ b.ToTable("IdentityServerClientIdPRestrictions");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b =>
+ {
+ b.Property("ClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("PostLogoutRedirectUri")
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.HasKey("ClientId", "PostLogoutRedirectUri");
+
+ b.ToTable("IdentityServerClientPostLogoutRedirectUris");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b =>
+ {
+ b.Property("ClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Key")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("Value")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.HasKey("ClientId", "Key");
+
+ b.ToTable("IdentityServerClientProperties");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b =>
+ {
+ b.Property("ClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RedirectUri")
+ .HasColumnType("nvarchar(200)")
+ .HasMaxLength(200);
+
+ b.HasKey("ClientId", "RedirectUri");
+
+ b.ToTable("IdentityServerClientRedirectUris");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b =>
+ {
+ b.Property("ClientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Scope")
+ .HasColumnType("nvarchar(196)")
+ .HasMaxLength(196);
+
+ b.HasKey("ClientId", "Scope");
+
+ b.ToTable("IdentityServerClientScopes");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b =>
+ {
+ b.Property