diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 49d3753a98..bd795bb48c 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -564,6 +564,7 @@ "AllowAbpStudioBetaAccess": "Allow ABP Studio Beta Access", "TotalQuestionCanNotBeNullMessage": "Total Question can not be null", "Permission:EditWinners": "Edit Winners", - "Permission:ChangeDrawingStatus": "Change Drawing Status" + "Permission:ChangeDrawingStatus": "Change Drawing Status", + "RemoveAllWinnersConfirmationMessage": "Are you sure you want to remove all winners?" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json index 16be4424be..f6cbee0306 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json @@ -230,7 +230,7 @@ "CommunityProfile": "ملف تعريف المجتمع", "BlogProfile": "الملف الشخصي للمدونة", "Tickets": "التذاكر", - "MeetTheABPCommunity": "ABP المجتمع معرفة" - + "MeetTheABPCommunity": "ABP المجتمع معرفة", + "DisplayName:CommunityIndexPagePoll": "استطلاع" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/cs.json index 2087e3dad6..498c0efa44 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/cs.json @@ -230,7 +230,7 @@ "CommunityProfile": "Profil komunity", "BlogProfile": "Profil blogu", "Tickets": "Vstupenky", - "MeetTheABPCommunity": "ABP Komunita poznat" - + "MeetTheABPCommunity": "ABP Komunita poznat", + "DisplayName:CommunityIndexPagePoll": "Anketa na stránce s indexem komunity" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de.json index d73dd692cc..cd6714f1fb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de.json @@ -229,7 +229,7 @@ "CommunityProfile": "Community-Profil", "BlogProfile": "Blog-Profil", "Tickets": "Tickets", - "MeetTheABPCommunity": "ABP Community kennenlernen" - + "MeetTheABPCommunity": "ABP Community kennenlernen", + "DisplayName:CommunityIndexPagePoll": "Community-Indexseite-Umfrage" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json index 2ad2dc0584..6398c703d2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json @@ -33,6 +33,7 @@ "Samples": "Samples", "FreeDDDBook": "Free DDD E-book", "New": "New", - "Volo.AbpIo.Domain:020005": "License extend year can not be lower than {MinExtendLicenseYear} year and greater than {MaxExtendLicenseYear} years " + "Volo.AbpIo.Domain:020005": "License extend year can not be lower than {MinExtendLicenseYear} year and greater than {MaxExtendLicenseYear} years ", + "DisplayName:CommunityIndexPagePoll": "Community Index Page Poll" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index e1d93275ba..158685b84c 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -236,7 +236,7 @@ "Video Courses": "Video Courses", "Packages": "Packages", "Trainings": "Trainings", - "MeetTheABPCommunity": "Meet the ABP Community" - + "MeetTheABPCommunity": "Meet the ABP Community", + "DisplayName:CommunityIndexPagePoll": "Community Index Page Poll" } -} +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json index 54f00ce409..f8d813067b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json @@ -229,7 +229,7 @@ "CommunityProfile": "Perfil de la comunidad", "BlogProfile": "Perfil del blog", "Tickets": "Entradas", - "MeetTheABPCommunity": "Conozca la ABPComunidad" - + "MeetTheABPCommunity": "Conozca la ABPComunidad", + "DisplayName:CommunityIndexPagePoll": "Encuesta de la página de índice de la comunidad" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json index fb40498b43..25f0f9dc70 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json @@ -230,7 +230,7 @@ "CommunityProfile": "Yhteisön profiili", "BlogProfile": "Blogin profiili", "Tickets": "Liput", - "MeetTheABPCommunity": "Tutustu ABPYhteisö:n kanssa" - + "MeetTheABPCommunity": "Tutustu ABPYhteisö:n kanssa", + "DisplayName:CommunityIndexPagePoll": "Yhteisön indeksointisivun kysely" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fr.json index 04c721a21e..a62cf08aa5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fr.json @@ -230,7 +230,7 @@ "CommunityProfile": "Profil de la communauté", "BlogProfile": "Profil du blog", "Tickets": "Des billets", - "MeetTheABPCommunity": "Découvrez ABP avec la Communauté" - + "MeetTheABPCommunity": "Découvrez ABP avec la Communauté", + "DisplayName:CommunityIndexPagePoll": "Sondage de la page d'accueil de la communauté" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hi.json index 0331a4fdac..e185ae7387 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hi.json @@ -230,7 +230,7 @@ "CommunityProfile": "सामुदायिक प्रोफ़ाइल", "BlogProfile": "ब्लॉग प्रोफ़ाइल", "Tickets": "टिकट", - "MeetTheABPCommunity": "ABP से मिलें समुदाय" - + "MeetTheABPCommunity": "ABP से मिलें समुदाय", + "DisplayName:CommunityIndexPagePoll": "सामुदायिक अनुभाग मतदान" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hr.json index d9e21564fc..41ed5cf56f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hr.json @@ -230,7 +230,7 @@ "CommunityProfile": "Profil zajednice", "BlogProfile": "Blog profil", "Tickets": "Ulaznice", - "MeetTheABPCommunity": "Upoznaj ABP Zajednicu" - + "MeetTheABPCommunity": "Upoznaj ABP Zajednicu", + "DisplayName:CommunityIndexPagePoll": "Anketa na stranici indeksa zajednice" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json index 2cc8165194..e1a317c2f7 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json @@ -230,7 +230,7 @@ "CommunityProfile": "Közösségi profil", "BlogProfile": "Blog profil", "Tickets": "Jegyek", - "MeetTheABPCommunity": "Ismerd meg az ABP-t a Közösséggel" - + "MeetTheABPCommunity": "Ismerd meg az ABP-t a Közösséggel", + "DisplayName:CommunityIndexPagePoll": "Közösségi Indexoldal Szavazás" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/is.json index f3626b94ac..68e8eff90e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/is.json @@ -230,7 +230,7 @@ "CommunityProfile": "Samfélagssnið", "BlogProfile": "Bloggprófíll", "Tickets": "Miðar", - "MeetTheABPCommunity": "Kynnistuðu ABP Samfélagið" - + "MeetTheABPCommunity": "Kynnistuðu ABP Samfélagið", + "DisplayName:CommunityIndexPagePoll": "Samfélagssnið" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json index 637e85ec70..e5569a5632 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json @@ -230,7 +230,7 @@ "CommunityProfile": "Profilo della comunità", "BlogProfile": "Profilo del blog", "Tickets": "Biglietti", - "MeetTheABPCommunity": "Incontra la ABPcomunità" - + "MeetTheABPCommunity": "Incontra la ABPcomunità", + "DisplayName:CommunityIndexPagePoll": "Sondaggio della pagina indice della comunità" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/nl.json index 3983f8b0d2..9f71d5928e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/nl.json @@ -230,7 +230,7 @@ "CommunityProfile": "Gemeenschapsprofiel", "BlogProfile": "Blogprofiel", "Tickets": "Kaartjes", - "MeetTheABPCommunity": "Maak kennis met ABP Gemeenschap" - + "MeetTheABPCommunity": "Maak kennis met ABP Gemeenschap", + "DisplayName:CommunityIndexPagePoll": "Gemeenschapsindexpagina-enquête" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pl-PL.json index e4327bbb39..925b881264 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pl-PL.json @@ -230,7 +230,7 @@ "CommunityProfile": "Profil społeczności", "BlogProfile": "Profil bloga", "Tickets": "Bilety", - "MeetTheABPCommunity": "Maak kennis met ABP Gemeenschap" - + "MeetTheABPCommunity": "Maak kennis met ABP Gemeenschap", + "DisplayName:CommunityIndexPagePoll": "Ankieta na stronie głównej społeczności" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json index daf287afae..de10e0a28b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json @@ -230,7 +230,7 @@ "CommunityProfile": "Perfil da comunidade", "BlogProfile": "Perfil do blog", "Tickets": "Ingressos", - "MeetTheABPCommunity": "Conheça a ABP com a Comunidade" - + "MeetTheABPCommunity": "Conheça a ABP com a Comunidade", + "DisplayName:CommunityIndexPagePoll": "Enquete da página inicial da comunidade" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json index b13cea5372..ff38e1ebf8 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json @@ -230,7 +230,7 @@ "CommunityProfile": "Profilul comunității", "BlogProfile": "Profil blog", "Tickets": "bilete", - "MeetTheABPCommunity": "Cunoaște ABP cu Comunitatea" - + "MeetTheABPCommunity": "Cunoaște ABP cu Comunitatea", + "DisplayName:CommunityIndexPagePoll": "Sondajul de pe pagina de index a comunității" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ru.json index db06720d18..6a3e049715 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ru.json @@ -236,7 +236,7 @@ "Video Courses": "Видео курсы", "Packages": "Пакеты", "Trainings": "Тренинги", - "MeetTheABPCommunity": "Познакомьтесь с ABP с Сообществом" - + "MeetTheABPCommunity": "Познакомьтесь с ABP с Сообществом", + "DisplayName:CommunityIndexPagePoll": "Опрос на главной странице сообщества" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sk.json index c7a3b7e666..f81d1b528b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sk.json @@ -230,7 +230,7 @@ "CommunityProfile": "Profil komunity", "BlogProfile": "Profil blogu", "Tickets": "Vstupenky", - "MeetTheABPCommunity": "Spoznajte ABP s Komunitou" - + "MeetTheABPCommunity": "Spoznajte ABP s Komunitou", + "DisplayName:CommunityIndexPagePoll": "Anketa na stránke indexu komunity" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sl.json index b866c3beec..d802ce68e9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sl.json @@ -230,7 +230,7 @@ "CommunityProfile": "Profil skupnosti", "BlogProfile": "Blog profil", "Tickets": "Vstopnice", - "MeetTheABPCommunity": "Spoznajte ABP z Skupnostjo" - + "MeetTheABPCommunity": "Spoznajte ABP z Skupnostjo", + "DisplayName:CommunityIndexPagePoll": "Anketa na strani z indeksom skupnosti" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json index eedb0ec024..8e11d62259 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json @@ -175,10 +175,7 @@ "Organizations": "Organizasyonlar", "ManageAccount": "Hesabı Yönet", "CommunityProfile": "Topluluk Profili", - "MeetTheABPCommunity": "ABP Community ile tanışın" - - - - + "MeetTheABPCommunity": "ABP Community ile tanışın", + "DisplayName:CommunityIndexPagePoll": "Topluluk Anasayfası Anketi" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/vi.json index 5105e49890..e331a7a2a7 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/vi.json @@ -229,7 +229,7 @@ "CommunityProfile": "Hồ sơ cộng đồng", "BlogProfile": "Hồ sơ blog", "Tickets": "Vé", - "MeetTheABPCommunity": "Gặp gỡ ABP với Cộng đồng" - + "MeetTheABPCommunity": "Gặp gỡ ABP với Cộng đồng", + "DisplayName:CommunityIndexPagePoll": "Bình chọn trang chủ cộng đồng" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json index 0876989221..923c2825ae 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json @@ -230,7 +230,7 @@ "CommunityProfile": "社区概况", "BlogProfile": "博客简介", "Tickets": "门票", - "MeetTheABPCommunity": "与 ABP 一起认识 社区" - + "MeetTheABPCommunity": "与 ABP 一起认识 社区", + "DisplayName:CommunityIndexPagePoll": "社区首页投票" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json index 3a6880b010..6a92984e39 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json @@ -230,7 +230,7 @@ "CommunityProfile": "社區簡介", "BlogProfile": "部落格簡介", "Tickets": "門票", - "MeetTheABPCommunity": "與 ABP 一起認識 社群" - + "MeetTheABPCommunity": "與 ABP 一起認識 社群", + "DisplayName:CommunityIndexPagePoll": "社區首頁調查" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json index 5cb4529fac..963546d9a3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json @@ -223,7 +223,7 @@ "AllAttendees": "جميع الحضور", "SeeRaffleDetail": "انظر تفاصيل السحب", "SeeRaffle": "انظر السحب", - "ParticipationIsComplete!": "المشاركة كاملة!", + "ParticipationIsComplete": "المشاركة كامل.", "ABPCoreDevelopmentTeam": "فريق التطوير الأساسي لبرنامج ABP", "RegisterTheEvent": "سجل الحدث", "GoToConferencePage": "انتقل إلى صفحة المؤتمر", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json index 146808545a..418cf5aef1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json @@ -223,7 +223,7 @@ "AllAttendees": "Všichni účastníci", "SeeRaffleDetail": "Viz Detail tomboly", "SeeRaffle": "Viz Tombola", - "ParticipationIsComplete!": "Účast je dokončena!", + "ParticipationIsComplete": "Účast je dokončena.", "ABPCoreDevelopmentTeam": "Základní vývojový tým ABP", "RegisterTheEvent": "Zaregistrujte událost", "GoToConferencePage": "Přejděte na stránku konference", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json index 3a9dab08a6..021c19b3ff 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json @@ -223,7 +223,7 @@ "AllAttendees": "Alle Teilnehmer", "SeeRaffleDetail": "Siehe Details zur Verlosung", "SeeRaffle": "Siehe Tombola", - "ParticipationIsComplete!": "Die Teilnahme ist abgeschlossen!", + "ParticipationIsComplete": "Die Teilnahme ist abgeschlossen.", "ABPCoreDevelopmentTeam": "ABP-Kernentwicklungsteam", "RegisterTheEvent": "Registrieren Sie die Veranstaltung", "GoToConferencePage": "Gehen Sie zur Konferenzseite", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index de7e9d2938..c8aed53b90 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -193,7 +193,7 @@ "AbpCommunityTitleContent": "ABP Community - Open Source ABP Framework", "CommunitySlogan": "A unique community platform for ABP Lovers", "RaffleIsNotActive": "Raffle is not active", - "YouAreAlreadyJoinedToThisRaffle": "You are already joined to this raffle", + "YouAreAlreadyJoinedToThisRaffle": "You already joined to this raffle!", "InvalidSubscriptionCode": "Invalid subscription code", "Raffle:{0}": "Raffle: {0}", "Join": "Join", @@ -206,7 +206,7 @@ "min": "min", "sec": "sec", "Winners": "Winners", - "To{0}LuckyWinners": "to {0} lucky winner(s)", + "To{0}LuckyWinners": "to {0} lucky winners", "ActiveRaffles": "Active Raffles", "UpcomingRaffles": "Upcoming Raffles", "CompletedRaffles": "Completed Raffles", @@ -216,14 +216,14 @@ "RaffleSubscriptionCodeInputErrorMessage": "The registration code is incorrect. Please try again.", "GoodJob!": "Good Job!", "RaffleJoinSuccessMessage": "You are successfully registered for the raffle. You will be informed via email if you win the prize!", - "RaffleLoginAndRegisterMessage": "You should sign in to join a raffle. You can create an account for free if you haven't registered yet.", + "RaffleLoginAndRegisterMessage": "You must sign in to join this raffle! If you haven't registered yet, create an account for free now.", "Ok": "Ok", "SeeDetails": "See Details", - "WaitingForTheDraw": "Waiting for the draw", + "WaitingForTheDraw": "Wait for the draw!", "AllAttendees": "All Attendees", "SeeRaffleDetail": "See Raffle Detail", "SeeRaffle": "See Raffle", - "ParticipationIsComplete!": "Participation is complete!", + "ParticipationIsComplete": "Participation is complete.", "ABPCoreDevelopmentTeam": "ABP Core Development Team", "RegisterTheEvent": "Register the Event", "GoToConferencePage": "Go to Conference Page", @@ -254,7 +254,8 @@ "Videos({0})": "Videos ({0})", "LatestArticles": "Latest Articles", "RaffleHeader": "Hello ABP Community Member!", - "RafflesInfo": "
This is the raffle page dedicated to show our appreciation towards you for being an active Community Member. We do ABP Community Talks, ABP .NET Conference, attend or sponsor to the .NET-related events in which we give away some gifts.

You can follow this page to see the upcoming raffles, attend them, or see previous raffles we draw including the winners.

Thank you for being an active member! See you in the upcoming raffles.", - "RafflesInfoTitle": "ABP Community Raffles" + "RafflesInfo": "
This is the raffle page dedicated to show our appreciation towards you for being an active Community Member. We do ABP Community Talks ,ABP .NET Conference, attend or sponsor to the .NET-related events in which we give away some gifts.

You can follow this page to see the upcoming raffles, attend them, or see previous raffles we draw including the winners.

Thank you for being an active member! See you in the upcoming raffles.", + "RafflesInfoTitle": "ABP Community Raffles", + "ToLuckyWinner": "to 1 lucky winner" } -} +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json index e6199fb7fb..c4e178bbd9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json @@ -223,7 +223,7 @@ "AllAttendees": "Todos los asistentes", "SeeRaffleDetail": "Ver Detalle del Sorteo", "SeeRaffle": "Ver Sorteo", - "ParticipationIsComplete!": "¡La participación está completa!", + "ParticipationIsComplete": "¡La participación está completa.", "ABPCoreDevelopmentTeam": "Equipo de desarrollo central de ABP", "RegisterTheEvent": "Registra el evento", "GoToConferencePage": "Ir a la página de la conferencia", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json index d7a9108249..ac509875d6 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json @@ -223,7 +223,7 @@ "AllAttendees": "Kaikki osallistujat", "SeeRaffleDetail": "Katso arpajaiset", "SeeRaffle": "Katso Arpajaiset", - "ParticipationIsComplete!": "Osallistuminen on valmis!", + "ParticipationIsComplete": "Osallistuminen on valmis.", "ABPCoreDevelopmentTeam": "ABP:n ydinkehitystiimi", "RegisterTheEvent": "Ilmoittaudu tapahtumaan", "GoToConferencePage": "Siirry konferenssisivulle", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json index 2142ccb0d1..c98a48d93e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json @@ -223,7 +223,7 @@ "AllAttendees": "Tous les participants", "SeeRaffleDetail": "Voir les détails du tirage au sort", "SeeRaffle": "Voir le tirage au sort", - "ParticipationIsComplete!": "La participation est terminée !", + "ParticipationIsComplete": "La participation est terminée.", "ABPCoreDevelopmentTeam": "Équipe de développement de base ABP", "RegisterTheEvent": "Enregistrez l'événement", "GoToConferencePage": "Aller à la page de la conférence", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json index 0f5964fe23..f3d300e8a2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json @@ -223,7 +223,7 @@ "AllAttendees": "सभी उपस्थितगण", "SeeRaffleDetail": "रैफ़ल विवरण देखें", "SeeRaffle": "रैफ़ल देखें", - "ParticipationIsComplete!": "भागीदारी पूरी हो गई है!", + "ParticipationIsComplete": "भागीदारी पूरी हो गई है.", "ABPCoreDevelopmentTeam": "एबीपी कोर डेवलपमेंट टीम", "RegisterTheEvent": "ईवेंट पंजीकृत करें", "GoToConferencePage": "कॉन्फ़्रेंस पृष्ठ पर जाएँ", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json index 521cc0ebb0..5b3546a78b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json @@ -223,7 +223,7 @@ "AllAttendees": "Svi Prisutni", "SeeRaffleDetail": "Pogledajte detalje nagradne igre", "SeeRaffle": "Vidi Raffle", - "ParticipationIsComplete!": "Sudjelovanje je završeno!", + "ParticipationIsComplete": "Sudjelovanje je završeno.", "ABPCoreDevelopmentTeam": "ABP glavni razvojni tim", "RegisterTheEvent": "Prijavite događaj", "GoToConferencePage": "Idite na stranicu konferencije", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json index 6829656470..1f74f9e7a9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json @@ -223,7 +223,7 @@ "AllAttendees": "Minden résztvevő", "SeeRaffleDetail": "Lásd a nyereményjáték részleteit", "SeeRaffle": "Lásd: Tombola", - "ParticipationIsComplete!": "A részvétel teljes!", + "ParticipationIsComplete": "A részvétel teljes.", "ABPCoreDevelopmentTeam": "ABP Core Development Team", "RegisterTheEvent": "Regisztrálja az Eseményt", "GoToConferencePage": "Menjen a konferencia oldalára", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json index c7ade090af..a991c387d4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json @@ -223,7 +223,7 @@ "AllAttendees": "Allir fundarmenn", "SeeRaffleDetail": "Sjá upplýsingar um happdrætti", "SeeRaffle": "Sjá Happdrætti", - "ParticipationIsComplete!": "Þátttöku er lokið!", + "ParticipationIsComplete": "Þátttöku er lokið.", "ABPCoreDevelopmentTeam": "ABP Core Development Team", "RegisterTheEvent": "Skráðu viðburðinn", "GoToConferencePage": "Farðu á ráðstefnusíðu", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json index 0c2d9f4648..901c356c9a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json @@ -223,7 +223,7 @@ "AllAttendees": "Tutti i partecipanti", "SeeRaffleDetail": "Vedi i dettagli della lotteria", "SeeRaffle": "Vedi Lotteria", - "ParticipationIsComplete!": "La partecipazione è completa!", + "ParticipationIsComplete": "La partecipazione è completa.", "ABPCoreDevelopmentTeam": "Team di sviluppo principale dell'ABP", "RegisterTheEvent": "Registra l'Evento", "GoToConferencePage": "Vai alla pagina della conferenza", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json index f8ba6cf5f0..4ee8e44a09 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json @@ -223,7 +223,7 @@ "AllAttendees": "Alle aanwezigen", "SeeRaffleDetail": "Zie loterijdetails", "SeeRaffle": "Zie loterij", - "ParticipationIsComplete!": "Deelname is voltooid!", + "ParticipationIsComplete": "Deelname is voltooid.", "ABPCoreDevelopmentTeam": "Kernontwikkelingsteam van ABP", "RegisterTheEvent": "Registreer het evenement", "GoToConferencePage": "Ga naar de conferentiepagina", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json index 7704c8f5f0..2df6780f03 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json @@ -223,7 +223,7 @@ "AllAttendees": "Wszyscy Uczestnicy", "SeeRaffleDetail": "Zobacz szczegóły loterii", "SeeRaffle": "Zobacz Loterię", - "ParticipationIsComplete!": "Udział jest zakończony!", + "ParticipationIsComplete": "Udział jest zakończony.", "ABPCoreDevelopmentTeam": "Główny zespół programistów ABP", "RegisterTheEvent": "Zarejestruj wydarzenie", "GoToConferencePage": "Przejdź do strony konferencji", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json index 88689b5c1a..9f2ce433d9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json @@ -223,7 +223,7 @@ "AllAttendees": "Todos os participantes", "SeeRaffleDetail": "Veja detalhes do sorteio", "SeeRaffle": "Ver sorteio", - "ParticipationIsComplete!": "A participação está completa!", + "ParticipationIsComplete": "A participação está completa.", "ABPCoreDevelopmentTeam": "Equipe principal de desenvolvimento da ABP", "RegisterTheEvent": "Registre o Evento", "GoToConferencePage": "Ir para a página da conferência", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json index f9c4e99bf1..c2862d1fd7 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json @@ -223,7 +223,7 @@ "AllAttendees": "Toți participanții", "SeeRaffleDetail": "Vezi Detaliul Tombolei", "SeeRaffle": "Vezi tombola", - "ParticipationIsComplete!": "Participarea este completă!", + "ParticipationIsComplete": "Participarea este completă.", "ABPCoreDevelopmentTeam": "Echipa de dezvoltare principală ABP", "RegisterTheEvent": "Înregistrați evenimentul", "GoToConferencePage": "Accesați pagina conferinței", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ru.json index a2c4f59c87..27f2b1203a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ru.json @@ -226,7 +226,7 @@ "AllAttendees": "Все участники", "SeeRaffleDetail": "См. подробную информацию о розыгрыше", "SeeRaffle": "Посмотреть лотерею", - "ParticipationIsComplete!": "Участие завершено!", + "ParticipationIsComplete": "Участие завершено.", "ABPCoreDevelopmentTeam": "Основная группа разработчиков ABP", "RegisterTheEvent": "Зарегистрировать мероприятие", "GoToConferencePage": "Перейти на страницу конференции", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json index b869378681..6ab3c9d074 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json @@ -223,7 +223,7 @@ "AllAttendees": "Všetci účastníci", "SeeRaffleDetail": "Pozrite si detail tomboly", "SeeRaffle": "Pozri Tombola", - "ParticipationIsComplete!": "Účasť je dokončená!", + "ParticipationIsComplete": "Účasť je dokončená.", "ABPCoreDevelopmentTeam": "ABP Core Development Team", "RegisterTheEvent": "Zaregistrujte udalosť", "GoToConferencePage": "Prejdite na stránku konferencie", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json index 924c92d5cc..23763c6f78 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json @@ -223,7 +223,7 @@ "AllAttendees": "Vsi udeleženci", "SeeRaffleDetail": "Oglejte si podrobnosti žrebanja", "SeeRaffle": "Glej nagradna igra", - "ParticipationIsComplete!": "Sodelovanje je zaključeno!", + "ParticipationIsComplete": "Sodelovanje je zaključeno.", "ABPCoreDevelopmentTeam": "ABP Core Development Team", "RegisterTheEvent": "Prijavite dogodek", "GoToConferencePage": "Pojdite na stran konference", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json index f6f794223e..a36ec9b0e8 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json @@ -223,7 +223,7 @@ "AllAttendees": "Tất cả người tham dự", "SeeRaffleDetail": "Xem chi tiết xổ số", "SeeRaffle": "Xem xổ số", - "ParticipationIsComplete!": "Việc tham gia đã hoàn tất!", + "ParticipationIsComplete": "Việc tham gia đã hoàn tất.", "ABPCoreDevelopmentTeam": "Nhóm phát triển cốt lõi của ABP", "RegisterTheEvent": "Đăng ký sự kiện", "GoToConferencePage": "Tới trang hội nghị", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json index 48f6d386ee..e899a94872 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json @@ -223,7 +223,7 @@ "AllAttendees": "所有与会者", "SeeRaffleDetail": "查看抽奖详情", "SeeRaffle": "参见抽奖", - "ParticipationIsComplete!": "参与已完成!", + "ParticipationIsComplete.": "参与已完成.", "ABPCoreDevelopmentTeam": "ABP 核心开发团队", "RegisterTheEvent": "注册活动", "GoToConferencePage": "转至会议页面", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json index 62159a4d21..ebec42dd8a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json @@ -223,7 +223,7 @@ "AllAttendees": "所有與會者", "SeeRaffleDetail": "看抽獎詳情", "SeeRaffle": "查看抽獎活動", - "ParticipationIsComplete!": "參與完畢!", + "ParticipationIsComplete": "參與完畢.", "ABPCoreDevelopmentTeam": "ABP核心開發團隊", "RegisterTheEvent": "註冊活動", "GoToConferencePage": "進入會議頁面", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json index 3033e49713..4cc00b6f2d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "إطار عمل ABP ليس مجرد إطار عمل، بل هو أيضًا دليل لتطوير/إدارة المشروع، لأنه يوفر تدريبات DDD وGenericRepository وDI وMicroservice وModularity. حتى لو كنت لن تستخدم إطار العمل نفسه، يمكنك تطوير نفسك باستخدام docs.abp.io الذي تم إعداده جيدًا واحترافيًا. (OpenIddict، وRedis، وQuartz، وما إلى ذلك) \n نظرًا لأن العديد من الأشياء تم إنشاؤها مسبقًا، فإنها تقلل من وقت تطوير المشروع بشكل كبير. (مثل صفحة تسجيل الدخول، ومعالجة الاستثناءات، وتصفية البيانات، وتسجيل التدقيق، والترجمة، ووحدة التحكم التلقائية في API وما إلى ذلك) \n كمثال من تطبيقنا، استخدمت ناقل الأحداث المحلي للتحكم في المخزون. لذلك، أنا قادر على إدارة حركات الطلب عن طريق كتابة معالج الأسهم. \n إنه لأمر رائع ألا نضيع الوقت في CreationTime، CreatorId. يتم ملؤها تلقائيًا.", "VideosLoginAndRegisterMessage": "يجب عليك تسجيل الدخول لمشاهدة مقاطع الفيديو. يمكنك إنشاء حساب للمشاهدة إذا لم تقم بذلك.", "Filter": "منقي", - "VideoCourses": "دورات الفيديو" + "VideoCourses": "دورات الفيديو", + "TestimonialText": "شهادتك", + "Position": "الوظيفة", + "ExperienceYear": "سنوات الخبرة", + "FullName": "الاسم الكامل", + "CompanySize": "حجم الشركة", + "Image": "صورتك الشخصية", + "TestimonialTitle": "لنسمع شهادتك", + "TestimonialInfo": "رأي عملائنا يهم! أخبرنا عن تجربتك مع منتجنا وخدمتنا.", + "Country": "البلد", + "TestimonialTextPlaceholder": "اكتب قصة موجزة حول كيف ساعدك ABP في بناء وتسليم مشروعك.", + "PositionPlaceholder": "وظيفتك في شركتك.", + "SelectExperienceYearPlaceholder": "كم عدد سنوات خبرتك في مجال البرمجيات؟", + "FullNamePlaceholder": "اسمك الكامل.", + "CompanyNamePlaceholder": "اسم شركتك.", + "SelectCompanySizePlaceholder": "عدد الموظفين", + "ImagePlaceholder": "صورتك.", + "SelectCountryPlaceholder": "بلدك.", + "YouAreNotAuthorizedToWriteTestimonial": "لا يُسمح لك بكتابة الشهادة إلا إذا قمت بتسجيل الدخول.", + "UnAuthorizeTestimonialInfo": "رأيك مهم! قم بتسجيل الدخول لمشاركته.", + "TheFileIsTooLargeForImage": "لا يمكن أن تكون صورتك الشخصية أكبر من 1 ميغابايت.", + "ThisExtensionIsNotAllowedForImage": "هذا الامتداد غير مسموح به.", + "FileUploadError": "خطأ في تحميل الملف", + "TestimonialSend": "شكرًا لك! لقد تلقينا شهادتك. سنقوم بمراجعتها واتخاذ الخطوة التالية قريبًا.", + "Title": "العنوان", + "TitlePlaceholder": "مطور برامج، مدير تكنولوجيا المعلومات، إلخ.", + "Characters": "الأحرف" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json index 6079191fdb..8ff0f3d0c9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework není jen rámec, je to také návod pro vývoj/řízení projektů, protože poskytuje školení DDD, GenericRepository, DI, Microservice, Modularity. I když se nechystáte používat samotný framework, můžete se vyvíjet s docs.abp.io, který je dobře a profesionálně připraven. (OpenIddict, Redis, Quartz atd.) \n Protože je mnoho věcí předpřipravených, výrazně to zkracuje dobu vývoje projektu. (Jako přihlašovací stránka, zpracování výjimek, filtrování dat-seedování, protokolování auditu, lokalizace, automatický api řadič atd.) \n Jako příklad z naší aplikace jsem pro řízení zásob použil místní sběrnici událostí. Takže jsem schopen řídit pohyby objednávek psaním skladového manipulátoru. \n Je skvělé neztrácet čas pro CreationTime, CreatorId. Vyplňují se automaticky.", "VideosLoginAndRegisterMessage": "Chcete-li sledovat videa, musíte se přihlásit. Můžete si vytvořit účet pro hodinky, pokud ještě nemáte.", "Filter": "Filtr", - "VideoCourses": "Video kurzy" + "VideoCourses": "Video kurzy", + "TestimonialText": "Vaše hodnocení", + "Position": "Pozice", + "ExperienceYear": "Roky zkušeností", + "FullName": "Celé jméno", + "CompanySize": "Velikost společnosti", + "Image": "Vaše profilová fotografie", + "TestimonialTitle": "Pojďme slyšet vaše hodnocení", + "TestimonialInfo": "To, co naši zákazníci říkají, má význam! Dejte nám vědět o své zkušenosti s naším produktem a servisem.", + "Country": "Země", + "TestimonialTextPlaceholder": "Napište stručný příběh o tom, jak vám ABP pomohlo stavět a dodávat váš projekt.", + "PositionPlaceholder": "Vaše pozice ve vaší společnosti.", + "SelectExperienceYearPlaceholder": "Kolik let jste ve softwarovém odvětví?", + "FullNamePlaceholder": "Vaše celé jméno.", + "CompanyNamePlaceholder": "Název vaší společnosti.", + "SelectCompanySizePlaceholder": "Počet zaměstnanců", + "ImagePlaceholder": "Vaše fotka.", + "SelectCountryPlaceholder": "Vaše země.", + "YouAreNotAuthorizedToWriteTestimonial": "Chcete-li napsat svědectví, musíte se přihlásit.", + "UnAuthorizeTestimonialInfo": "Vaše názor je důležitý! Přihlaste se pro sdílení.", + "TheFileIsTooLargeForImage": "Vaše profilová fotografie nesmí být větší než 1 MB", + "ThisExtensionIsNotAllowedForImage": "Tento typ souboru není povolen.", + "FileUploadError": "Chyba při nahrávání souboru", + "TestimonialSend": "Děkujeme! Obdrželi jsme vaše svědectví. Brzy to zkontrolujeme a přijmeme další kroky.", + "Title": "Titul", + "TitlePlaceholder": "Vývojář softwaru, CTO atd.", + "Characters": "znaky" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json index 915e680400..fdeefe8878 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework ist nicht nur ein Framework, sondern auch eine Anleitung für die Projektentwicklung/-verwaltung, da es DDD-, GenericRepository-, DI-, Microservice- und Modularitätsschulungen bereitstellt. Auch wenn Sie das Framework selbst nicht verwenden, können Sie sich mit docs.abp.io selbst entwickeln, das gut und professionell vorbereitet ist. (OpenIddict, Redis, Quartz usw.) \n Da viele Dinge vorgefertigt sind, verkürzt es die Projektentwicklungszeit erheblich. (Zum Beispiel Anmeldeseite, Ausnahmebehandlung, Datenfilterung/Seeding, Audit-Protokollierung, Lokalisierung, automatischer API-Controller usw.) \n Als Beispiel aus unserer App habe ich Local Event Bus für die Bestandskontrolle verwendet. Daher bin ich in der Lage, Auftragsbewegungen zu verwalten, indem ich „Stock Handler“ schreibe. \n Es ist wunderbar, keine Zeit für CreationTime und CreatorId zu verlieren. Sie werden automatisch ausgefüllt.", "VideosLoginAndRegisterMessage": "Sie müssen sich anmelden, um Videos anzusehen. Sie können ein Konto für die Uhr erstellen, wenn Sie noch kein Konto haben.", "Filter": "Filter", - "VideoCourses": "Videokurse" + "VideoCourses": "Videokurse", + "TestimonialText": "Ihre Bewertung", + "Position": "Position", + "ExperienceYear": "Jahre Erfahrung", + "FullName": "Vollständiger Name", + "CompanySize": "Firmengröße", + "Image": "Ihr Profilbild", + "TestimonialTitle": "Lassen Sie uns Ihre Bewertung hören", + "TestimonialInfo": "Was unsere Kunden sagen, ist wichtig! Erzählen Sie uns von Ihrer Erfahrung mit unserem Produkt und Service.", + "Country": "Land", + "TestimonialTextPlaceholder": "Schreiben Sie eine kurze Geschichte darüber, wie Ihnen ABP geholfen hat, Ihr Projekt zu entwickeln und zu liefern.", + "PositionPlaceholder": "Ihre Position in Ihrem Unternehmen.", + "SelectExperienceYearPlaceholder": "Wie viele Jahre haben Sie Erfahrung in der Softwarebranche?", + "FullNamePlaceholder": "Ihr vollständiger Name.", + "CompanyNamePlaceholder": "Der Name Ihres Unternehmens.", + "SelectCompanySizePlaceholder": "Anzahl der Mitarbeiter", + "ImagePlaceholder": "Ihr Bild.", + "SelectCountryPlaceholder": "Ihr Land.", + "YouAreNotAuthorizedToWriteTestimonial": "Um eine Bewertung zu schreiben, müssen Sie angemeldet sein.", + "UnAuthorizeTestimonialInfo": "Ihre Meinung ist wichtig! Melden Sie sich an, um sie zu teilen.", + "TheFileIsTooLargeForImage": "Ihr Profilbild darf nicht größer als 1 MB sein.", + "ThisExtensionIsNotAllowedForImage": "Diese Erweiterung ist nicht erlaubt.", + "FileUploadError": "Fehler beim Hochladen der Datei", + "TestimonialSend": "Vielen Dank! Wir haben Ihre Bewertung erhalten. Wir werden sie bald überprüfen und den nächsten Schritt unternehmen.", + "Title": "Titel", + "TitlePlaceholder": "Softwareentwickler, CTO usw.", + "Characters": "zeichen" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 5f3db4f102..aa829b0319 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -260,7 +260,7 @@ "TellUsAboutYourself": "Tell us a little bit about yourself", "Name": "Name", "Surname": "Surname", - "CompanyName": "Company Name", + "CompanyName": "Company name", "DoYouAgreePrivacyPolicy": "I agree to the Terms & Conditions and Privacy Policy.", "Free": "Free", "DDDEBook": "DDD E-Book", @@ -443,26 +443,30 @@ "VideoCourses": "Video Courses", "TestimonialText": "Your testimonial", "Position": "Position", - "ExperienceYear": "Years of Experience", - "FullName": "Full Name", - "CompanySize": "Company Size", - "Image": "Your profile picture", + "ExperienceYear": "Years of experience", + "FullName": "Full name", + "CompanySize": "Company size", "TestimonialTitle": "Let's hear your testimonial", "TestimonialInfo": "What our customers say matters! Tell us about your experience with our product and service.", "Country": "Country", - "TestimonialTextPlaceholder": "Write a brief story about how ABP helped you build and deliver your project. ", - "PositionPlaceholder": "Your position at your company.", + "TestimonialTextPlaceholder": "Write a brief story about how ABP helped you build and deliver your project.", + "PositionPlaceholder": "Your position at your company", "SelectExperienceYearPlaceholder": "How many years have you been in software stuff", - "FullNamePlaceholder": "Your full name.", - "CompanyNamePlaceholder": "Your company name.", + "FullNamePlaceholder": "Your full name", + "CompanyNamePlaceholder": "Your company name", "SelectCompanySizePlaceholder": "Employee count", - "ImagePlaceholder": "Your image.", - "SelectCountryPlaceholder": "Your country.", + "ImagePlaceholder": "Your image", + "SelectCountryPlaceholder": "Your country", "YouAreNotAuthorizedToWriteTestimonial": "To be able to write testimonial letter, you must be sign in.", - "UnAuthorizeTestimonialInfo": "If you want to share your opinion, you must be sign in", - "TheFileIsTooLargeForImage": "Your profile picture cannot be more than 1 MB", + "UnAuthorizeTestimonialInfo": "Your opinion matters! Log in to share it.", + "TheFileIsTooLargeForImage": "Your profile picture cannot be more than {0} MB", "ThisExtensionIsNotAllowedForImage": "This extension is not allowed.", - "FileUploadError": "File upload error" + "FileUploadError": "File upload error", + "TestimonialSend": "Thank you! We've received your testimonial.
We'll review and take the next step soon.", + "Title": "Title", + "TitlePlaceholder": "Software Developer, CTO etc.", + "Characters": "characters", + "Testimonial_YourProfilePicture": "Your profile picture (only {0})" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json index 6e67bf1aee..132a55f0ad 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework no es solo un marco, también es una guía para el desarrollo/gestión de proyectos, porque proporciona capacitaciones sobre DDD, GenericRepository, DI, Microservice y Modularity. Incluso si no va a utilizar el marco en sí, puede desarrollarlo usted mismo con docs.abp.io, que está bien preparado y profesionalmente. (OpenIddict, Redis, Quartz, etc.) \n Debido a que muchos elementos están prediseñados, acorta significativamente el tiempo de desarrollo del proyecto. (Como página de inicio de sesión, manejo de excepciones, filtrado y siembra de datos, registro de auditoría, localización, controlador de API automático, etc.) \n Como ejemplo de nuestra aplicación, he utilizado Local Event Bus para el control de existencias. Por lo tanto, puedo gestionar los movimientos de pedidos escribiendo el controlador de stock. \n Es maravilloso no perder tiempo con CreationTime, CreatorId. Se llenan automáticamente.", "VideosLoginAndRegisterMessage": "Debes iniciar sesión para ver videos. Puedes crear una cuenta para ver si aún no lo has hecho.", "Filter": "Filtrar", - "VideoCourses": "Cursos en vídeo" + "VideoCourses": "Cursos en vídeo", + "TestimonialText": "Tu testimonio", + "Position": "Cargo", + "ExperienceYear": "Años de experiencia", + "FullName": "Nombre completo", + "CompanySize": "Tamaño de la empresa", + "Image": "Tu foto de perfil", + "TestimonialTitle": "Escuchemos tu testimonio", + "TestimonialInfo": "¡Lo que dicen nuestros clientes es importante! Cuéntanos tu experiencia con nuestro producto y servicio.", + "Country": "País", + "TestimonialTextPlaceholder": "Escribe una breve historia sobre cómo ABP te ayudó a construir y entregar tu proyecto.", + "PositionPlaceholder": "Tu posición en tu empresa.", + "SelectExperienceYearPlaceholder": "¿Cuántos años llevas en el campo del software?", + "FullNamePlaceholder": "Tu nombre completo.", + "CompanyNamePlaceholder": "Nombre de tu empresa.", + "SelectCompanySizePlaceholder": "Cantidad de empleados", + "ImagePlaceholder": "Tu imagen.", + "SelectCountryPlaceholder": "Tu país.", + "YouAreNotAuthorizedToWriteTestimonial": "Para poder escribir un testimonio, debes iniciar sesión.", + "UnAuthorizeTestimonialInfo": "¡Tu opinión es importante! Inicia sesión para compartirla.", + "TheFileIsTooLargeForImage": "Tu foto de perfil no puede superar 1 MB.", + "ThisExtensionIsNotAllowedForImage": "Esta extensión no está permitida.", + "FileUploadError": "Error al cargar el archivo", + "TestimonialSend": "¡Gracias! Hemos recibido tu testimonio. Lo revisaremos y daremos el próximo paso pronto.", + "Title": "Título", + "TitlePlaceholder": "Desarrollador de software, CTO, etc.", + "Characters": "caracteres" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json index 255700516e..2332329155 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework ei ole vain viitekehys, se on myös opastus projektien kehittämiseen/hallintaan, koska se tarjoaa DDD-, GenericRepository-, DI-, Microservice- ja Modularity-koulutuksia. Vaikka et itse käyttäisikään kehystä, voit kehittää itseäsi docs.abp.io:lla, joka on hyvin ja ammattimaisesti valmisteltu. (OpenIddict, Redis, Quartz jne.) \n Koska monet asiat on rakennettu valmiiksi, se lyhentää projektin kehitysaikaa merkittävästi. (Kuten kirjautumissivu, poikkeusten käsittely, tietojen suodatus-kylvö, tarkastusloki, lokalisointi, automaattinen api-ohjain jne.) \n Esimerkkinä sovelluksestamme, olen käyttänyt Local Event Busia varaston hallintaan. Pystyn siis hallitsemaan tilausliikkeitä kirjoittamalla varastokäsittelijäksi. \n On hienoa olla hukkaamatta aikaa CreationTime, CreatorId. Ne täytetään automaattisesti.", "VideosLoginAndRegisterMessage": "Sinun on kirjauduttava sisään katsoaksesi videoita. Voit luoda tilin kellolle, jos et ole vielä tehnyt sitä.", "Filter": "Suodattaa", - "VideoCourses": "Videokurssit" + "VideoCourses": "Videokurssit", + "TestimonialText": "Arvostelusi", + "Position": "Asema", + "ExperienceYear": "Vuoden kokemus", + "FullName": "Koko nimi", + "CompanySize": "Yrityksen koko", + "Image": "Profiilikuvasi", + "TestimonialTitle": "Kuunnellaan arvosteluasi", + "TestimonialInfo": "Mitä asiakkaamme sanovat, on tärkeää! Kerro meille kokemuksestasi tuotteemme ja palvelumme parissa.", + "Country": "Maa", + "TestimonialTextPlaceholder": "Kirjoita lyhyt tarina siitä, miten ABP auttoi sinua rakentamaan ja toimittamaan projektisi.", + "PositionPlaceholder": "Asemasi yrityksessäsi.", + "SelectExperienceYearPlaceholder": "Kuinka monta vuotta olet työskennellyt ohjelmistoteollisuudessa?", + "FullNamePlaceholder": "Koko nimesi.", + "CompanyNamePlaceholder": "Yrityksesi nimi.", + "SelectCompanySizePlaceholder": "Työntekijöiden määrä", + "ImagePlaceholder": "Kuvasi.", + "SelectCountryPlaceholder": "Maasi.", + "YouAreNotAuthorizedToWriteTestimonial": "Voit kirjoittaa arvostelun vain kirjautuneena sisään.", + "UnAuthorizeTestimonialInfo": "Mielipiteesi on tärkeä! Kirjaudu sisään jakaaaksesi sen.", + "TheFileIsTooLargeForImage": "Profiilikuvasi ei saa olla yli 1 Mt.", + "ThisExtensionIsNotAllowedForImage": "Tätä tiedostotyyppiä ei sallita.", + "FileUploadError": "Tiedoston latausvirhe", + "TestimonialSend": "Kiitos! Olemme vastaanottaneet arvostelusi. Käymme sen läpi ja otamme seuraavan askeleen pian.", + "Title": "Titteli", + "TitlePlaceholder": "Ohjelmistokehittäjä, CTO, jne.", + "Characters": "hahmot" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json index 00016d687d..6d4378ea0b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework n'est pas seulement un framework, c'est aussi un guide pour le développement/gestion de projets, car il propose des formations DDD, GenericRepository, DI, Microservice, Modularité. Même si vous n'utilisez pas le framework lui-même, vous pouvez vous développer avec docs.abp.io qui est bien préparé de manière professionnelle. (OpenIddict, Redis, Quartz, etc.) \n Parce que de nombreux éléments sont pré-construits, cela réduit considérablement le temps de développement du projet. (Tels que la page de connexion, la gestion des exceptions, le filtrage-ensemencement des données, la journalisation d'audit, la localisation, le contrôleur API automatique, etc.) \n À titre d'exemple de notre application, j'ai utilisé Local Event Bus pour le contrôle des stocks. Ainsi, je suis capable de gérer les mouvements de commandes en écrivant stock handler. \n C'est merveilleux de ne pas perdre de temps pour CreationTime, CreatorId. Ils sont remplis automatiquement.", "VideosLoginAndRegisterMessage": "Vous devez vous connecter pour regarder des vidéos. Vous pouvez créer un compte pour regarder si vous ne l'avez pas encore fait.", "Filter": "Filtre", - "VideoCourses": "Cours vidéo" + "VideoCourses": "Cours vidéo", + "TestimonialText": "Votre témoignage", + "Position": "Poste", + "ExperienceYear": "Années d'expérience", + "FullName": "Nom complet", + "CompanySize": "Taille de l'entreprise", + "Image": "Votre photo de profil", + "TestimonialTitle": "Écoutons votre témoignage", + "TestimonialInfo": "Ce que disent nos clients est important ! Parlez-nous de votre expérience avec notre produit et notre service.", + "Country": "Pays", + "TestimonialTextPlaceholder": "Rédigez une brève histoire sur la manière dont ABP vous a aidé à construire et livrer votre projet.", + "PositionPlaceholder": "Votre poste dans votre entreprise.", + "SelectExperienceYearPlaceholder": "Combien d'années avez-vous d'expérience dans le domaine du logiciel ?", + "FullNamePlaceholder": "Votre nom complet.", + "CompanyNamePlaceholder": "Nom de votre entreprise.", + "SelectCompanySizePlaceholder": "Nombre d'employés", + "ImagePlaceholder": "Votre image.", + "SelectCountryPlaceholder": "Votre pays.", + "YouAreNotAuthorizedToWriteTestimonial": "Pour pouvoir écrire un témoignage, vous devez être connecté(e).", + "UnAuthorizeTestimonialInfo": "Votre avis compte ! Connectez-vous pour le partager.", + "TheFileIsTooLargeForImage": "Votre photo de profil ne peut pas dépasser 1 Mo.", + "ThisExtensionIsNotAllowedForImage": "Cette extension n'est pas autorisée.", + "FileUploadError": "Erreur lors du téléchargement du fichier", + "TestimonialSend": "Merci ! Nous avons bien reçu votre témoignage. Nous le passerons en revue et prendrons la prochaine étape bientôt.", + "Title": "Titre", + "TitlePlaceholder": "Développeur de logiciels, CTO, etc.", + "Characters": "caractères" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json index 69a8679150..4cef58db12 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "एबीपी फ्रेमवर्क न केवल एक ढांचा है, यह परियोजना विकास/प्रबंधन के लिए एक मार्गदर्शन भी है, क्योंकि यह डीडीडी, जेनेरिक रिपोजिटरी, डीआई, माइक्रोसर्विस, मॉड्यूलरिटी प्रशिक्षण प्रदान करता है। भले ही आप स्वयं फ्रेमवर्क का उपयोग नहीं करने जा रहे हैं, आप docs.abp.io के साथ स्वयं को विकसित कर सकते हैं जो अच्छी तरह से और पेशेवर रूप से तैयार है। (OpenIddict, Redis, Quartz आदि) \n चूंकि कई चीजें पहले से निर्मित होती हैं, इसलिए यह परियोजना के विकास के समय को काफी कम कर देता है। (जैसे लॉगिन पेज, अपवाद हैंडलिंग, डेटा फ़िल्टरिंग-सीडिंग, ऑडिट लॉगिंग, स्थानीयकरण, ऑटो एपीआई नियंत्रक इत्यादि) \n हमारे ऐप से एक उदाहरण के रूप में, मैंने स्टॉक नियंत्रण के लिए स्थानीय इवेंट बस का उपयोग किया है। इसलिए, मैं स्टॉक हैंडलर लिखकर ऑर्डर मूवमेंट को प्रबंधित करने में सक्षम हूं। \n CreationTime, CreatorId के लिए समय न बर्बाद करना अद्भुत है। वे स्वचालित रूप से भर जाते हैं.", "VideosLoginAndRegisterMessage": "वीडियो देखने के लिए आपको साइन इन करना होगा. यदि आपने नहीं बनाया है तो आप घड़ी के लिए एक खाता बना सकते हैं।", "Filter": "फ़िल्टर", - "VideoCourses": "वीडियो पाठ्यक्रम" + "VideoCourses": "वीडियो पाठ्यक्रम", + "TestimonialText": "आपका साक्षात्कार", + "Position": "पद", + "ExperienceYear": "अनुभव के वर्ष", + "FullName": "पूरा नाम", + "CompanySize": "कंपनी का आकार", + "Image": "आपकी प्रोफ़ाइल तस्वीर", + "TestimonialTitle": "हम आपका साक्षात्कार सुनें", + "TestimonialInfo": "हमारे ग्राहकों की कहानियाँ महत्वपूर्ण हैं! हमें अपने उत्पाद और सेवा के साथ अपने अनुभव के बारे में बताएं।", + "Country": "देश", + "TestimonialTextPlaceholder": "एक संक्षेप कहानी लिखें कि ABP ने आपको अपने परियोजना को बनाने और पहुंचाने में कैसे मदद की।", + "PositionPlaceholder": "आपका पद आपकी कंपनी में।", + "SelectExperienceYearPlaceholder": "आप सॉफ़्टवेयर क्षेत्र में कितने वर्षों से हैं?", + "FullNamePlaceholder": "आपका पूरा नाम।", + "CompanyNamePlaceholder": "आपकी कंपनी का नाम।", + "SelectCompanySizePlaceholder": "कर्मचारी संख्या", + "ImagePlaceholder": "आपकी छवि।", + "SelectCountryPlaceholder": "आपका देश।", + "YouAreNotAuthorizedToWriteTestimonial": "एक साक्षात्कार लिखने के लिए, आपको लॉग इन करना होगा।", + "UnAuthorizeTestimonialInfo": "आपकी राय महत्वपूर्ण है! इसे साझा करने के लिए लॉग इन करें।", + "TheFileIsTooLargeForImage": "आपकी प्रोफ़ाइल तस्वीर 1 MB से अधिक नहीं हो सकती।", + "ThisExtensionIsNotAllowedForImage": "यह एक्सटेंशन अनुमति नहीं है।", + "FileUploadError": "फ़ाइल अपलोड की गई में त्रुटि", + "TestimonialSend": "धन्यवाद! हमने आपका साक्षात्कार प्राप्त किया है। हम इसे समीक्षा करेंगे और शीघ्र अगला कदम उठाएंगे।", + "Title": "शीर्षक", + "TitlePlaceholder": "सॉफ़्टवेयर डेवेलपर, सीटीओ, आदि।", + "Characters": "अक्षर" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json index d389a32c90..a7ac8ad080 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework nije samo okvir, već je i smjernica za razvoj/upravljanje projektom, jer pruža DDD, GenericRepository, DI, Microservice, Modularity treninge. Čak i ako nećete koristiti sam framework, možete se razvijati s docs.abp.io koji je dobro i profesionalno pripremljen. (OpenIddict, Redis, Quartz itd.) \n Budući da su mnoge stvari unaprijed izgrađene, značajno skraćuje vrijeme razvoja projekta. (Kao što je stranica za prijavu, rukovanje iznimkama, filtriranje-sijanje podataka, bilježenje revizije, lokalizacija, automatski API kontroler itd.) \n Kao primjer iz naše aplikacije, koristio sam lokalnu sabirnicu događaja za kontrolu zaliha. Dakle, mogu upravljati kretanjem narudžbi pisanjem rukovatelja zalihama. \n Divno je ne gubiti vrijeme za CreationTime, CreatorId. Pune se automatski.", "VideosLoginAndRegisterMessage": "Morate se prijaviti za gledanje videa. Možete stvoriti račun za sat ako niste.", "Filter": "filtar", - "VideoCourses": "Video tečajevi" + "VideoCourses": "Video tečajevi", + "TestimonialText": "Vaša preporuka", + "Position": "Pozicija", + "ExperienceYear": "Godine iskustva", + "FullName": "Puno ime", + "CompanySize": "Veličina tvrtke", + "Image": "Vaša profilna slika", + "TestimonialTitle": "Poslušajmo vašu preporuku", + "TestimonialInfo": "Ono što naši klijenti kažu važno je! Podijelite s nama svoje iskustvo s našim proizvodom i uslugom.", + "Country": "Država", + "TestimonialTextPlaceholder": "Napišite kratku priču o tome kako vam je ABP pomogao izgraditi i isporučiti vaš projekt.", + "PositionPlaceholder": "Vaša pozicija u tvrtki.", + "SelectExperienceYearPlaceholder": "Koliko godina imate iskustva u području softvera?", + "FullNamePlaceholder": "Vaše puno ime.", + "CompanyNamePlaceholder": "Naziv vaše tvrtke.", + "SelectCompanySizePlaceholder": "Broj zaposlenika", + "ImagePlaceholder": "Vaša slika.", + "SelectCountryPlaceholder": "Vaša država.", + "YouAreNotAuthorizedToWriteTestimonial": "Da biste mogli napisati preporuku, morate biti prijavljeni.", + "UnAuthorizeTestimonialInfo": "Vaše mišljenje je važno! Prijavite se kako biste ga podijelili.", + "TheFileIsTooLargeForImage": "Vaša profilna slika ne smije biti veća od 1 MB.", + "ThisExtensionIsNotAllowedForImage": "Ovo proširenje nije dopušteno.", + "FileUploadError": "Pogreška prilikom prijenosa datoteke", + "TestimonialSend": "Hvala vam! Primili smo vašu preporuku. Provjerit ćemo je i uskoro poduzeti sljedeći korak.", + "Title": "Naslov", + "TitlePlaceholder": "Razvojni inženjer, CTO, itd.", + "Characters": "znakovi" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json index c4aa000b23..87d0f0c2fd 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "Az ABP Framework nem csak keretrendszer, hanem útmutató is a projektfejlesztéshez/menedzsmenthez, mert DDD, GenericRepository, DI, Microservice, Modularity képzéseket biztosít. Még ha nem is magát a keretrendszert használja, fejlesztheti magát a docs.abp.io segítségével, amely jól és szakmailag felkészült. (OpenIddict, Redis, Quartz stb.) \n Mivel sok minden előre be van építve, jelentősen lerövidíti a projektfejlesztési időt. (Például bejelentkezési oldal, kivételkezelés, adatszűrés-seeding, audit naplózás, lokalizáció, automatikus api-vezérlő stb.) \n Alkalmazásunkból példaként a Local Event Bus-t használtam készletkezelésre. Így a rendelési mozgásokat készletkezelő írással tudom kezelni. \n Csodálatos, hogy nem veszít időt a CreationTime, CreatorId használatára. Automatikusan kitöltődnek.", "VideosLoginAndRegisterMessage": "A videók megtekintéséhez be kell jelentkeznie. Ha még nem tette meg, létrehozhat fiókot az órához.", "Filter": "Szűrő", - "VideoCourses": "Videó tanfolyamok" + "VideoCourses": "Videó tanfolyamok", + "TestimonialText": "Ajánlásod", + "Position": "Pozíció", + "ExperienceYear": "Tapasztalati év", + "FullName": "Teljes név", + "CompanySize": "Cég mérete", + "Image": "Profilképed", + "TestimonialTitle": "Halljuk ajánlásod", + "TestimonialInfo": "Ami ügyfeleinktől származik, az fontos! Mesélj nekünk tapasztalataidról a termékünkkel és szolgáltatásunkkal kapcsolatban.", + "Country": "Ország", + "TestimonialTextPlaceholder": "Írj rövid történetet arról, hogyan segített neked az ABP projektépítésben és szállításban.", + "PositionPlaceholder": "Pozíciód a vállalatodban.", + "SelectExperienceYearPlaceholder": "Mennyi éves tapasztalatod van a szoftverek területén?", + "FullNamePlaceholder": "Teljes neved.", + "CompanyNamePlaceholder": "Céged neve.", + "SelectCompanySizePlaceholder": "Alkalmazottak száma", + "ImagePlaceholder": "Profilképed.", + "SelectCountryPlaceholder": "Országod.", + "YouAreNotAuthorizedToWriteTestimonial": "Ahhoz, hogy ajánlást írhass, be kell jelentkezned.", + "UnAuthorizeTestimonialInfo": "A véleménye számít! Jelentkezzen be, hogy megossza.", + "TheFileIsTooLargeForImage": "A profilképed nem lehet nagyobb, mint 1 MB.", + "ThisExtensionIsNotAllowedForImage": "Ez a kiterjesztés nem engedélyezett.", + "FileUploadError": "Hiba történt a fájl feltöltése közben", + "TestimonialSend": "Köszönjük! Megkaptuk az ajánlásod. Hamarosan átnézzük és következő lépéseket teszünk.", + "Title": "Cím", + "TitlePlaceholder": "Szoftvertervező, CTO, stb.", + "Characters": "karakterek" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json index 816cd1133e..8f9d3ead04 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework er ekki aðeins rammi, það er líka leiðsögn fyrir þróun/stjórnun verkefna, vegna þess að það veitir DDD, GenericRepository, DI, Microservice, Modularity þjálfun. Jafnvel þó þú ætlir ekki að nota ramma sjálfan þig geturðu þróað sjálfan þig með docs.abp.io sem er vel og faglega undirbúið. (OpenIddict, Redis, Quartz o.s.frv.) \n Þar sem margt er forsmíðað styttir það þróunartíma verkefna verulega. (Svo sem innskráningarsíðu, undantekningarmeðferð, gagnasíun-sáningu, endurskoðunarskráningu, staðfærslu, sjálfvirkan API stjórnandi o.s.frv.) \n Sem dæmi úr appinu okkar hef ég notað Local Event Bus fyrir lagerstýringu. Þannig að ég get stjórnað pöntunarhreyfingum með því að skrifa lager meðhöndlun. \n Það er dásamlegt að missa ekki tíma fyrir CreationTime, CreatorId. Þau fyllast sjálfkrafa.", "VideosLoginAndRegisterMessage": "Þú verður að skrá þig inn til að horfa á myndbönd. Þú getur búið til reikning fyrir úrið ef þú hefur ekki gert það.", "Filter": "Sía", - "VideoCourses": "Vídeónámskeið" + "VideoCourses": "Vídeónámskeið", + "TestimonialText": "Viðmiðun þín", + "Position": "Staða", + "ExperienceYear": "Reynsluár", + "FullName": "Fullt Nafn", + "CompanySize": "Fyrirtækisstærð", + "Image": "Prófílmynd þín", + "TestimonialTitle": "Hlýtur að heyra viðmiðu þína", + "TestimonialInfo": "Það sem viðskiptavinir okkar segja skiptir máli! Segið okkur frá reynslu þinni með vörum okkar og þjónustu.", + "Country": "Land", + "TestimonialTextPlaceholder": "Skrifið stutta sögu um hvernig ABP hjálpaði yður að byggja og afhenda verkefnið ykkar.", + "PositionPlaceholder": "Staða þín í fyrirtækinu þínu.", + "SelectExperienceYearPlaceholder": "Hversu mörg ár hefur þú starfað í hugbúnaðarverkfræði?", + "FullNamePlaceholder": "Fullt nafn þitt.", + "CompanyNamePlaceholder": "Nafn fyrirtækisins þíns.", + "SelectCompanySizePlaceholder": "Fjöldi starfsmanna", + "ImagePlaceholder": "Prófílmynd þín.", + "SelectCountryPlaceholder": "Landið þitt.", + "YouAreNotAuthorizedToWriteTestimonial": "Til að geta skrifað viðmiðun, verður þú að skrá þig inn.", + "UnAuthorizeTestimonialInfo": "Þín skoðun er mikilvæg! Skráðu þig inn til að deila henni.", + "TheFileIsTooLargeForImage": "Prófílmynd þín má ekki vera stærri en 1 MB.", + "ThisExtensionIsNotAllowedForImage": "Þessi viðbót er ekki leyfð.", + "FileUploadError": "Villa við upphleðslu skráar", + "TestimonialSend": "Þakka þér! Við höfum fengið viðmiðuna þína. Við munum fara yfir hana fljótt og taka næsta skref.", + "Title": "Titill", + "TitlePlaceholder": "Hugbúnaðarþróunarmiðill, CTO o.s.frv.", + "Characters": "stafir" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json index 4714cb4f9b..d1396d59fc 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework non è solo un framework, è anche una guida per lo sviluppo/gestione del progetto, poiché fornisce corsi di formazione su DDD, GenericRepository, DI, Microservice e Modularità. Anche se non utilizzerai il framework stesso, puoi svilupparti con docs.abp.io che è ben preparato e professionalmente. (OpenIddict, Redis, Quartz ecc.) \n Poiché molte cose sono precostruite, riduce significativamente i tempi di sviluppo del progetto. (Come pagina di accesso, gestione delle eccezioni, seeding del filtraggio dei dati, registrazione di controllo, localizzazione, controller API automatico ecc.) \n Come esempio tratto dalla nostra app, ho utilizzato Local Event Bus per il controllo delle scorte. Quindi, sono in grado di gestire i movimenti degli ordini scrivendo stock handler. \n È meraviglioso non perdere tempo con CreationTime, CreatorId. Si riempiono automaticamente.", "VideosLoginAndRegisterMessage": "Devi accedere per guardare i video. Se non lo hai già fatto, puoi creare un account per Watch.", "Filter": "Filtro", - "VideoCourses": "Videocorsi" + "VideoCourses": "Videocorsi", + "TestimonialText": "La tua testimonianza", + "Position": "Posizione", + "ExperienceYear": "Anni di esperienza", + "FullName": "Nome e cognome", + "CompanySize": "Dimensione aziendale", + "Image": "La tua immagine del profilo", + "TestimonialTitle": "Ascoltiamo la tua testimonianza", + "TestimonialInfo": "Ciò che dicono i nostri clienti è importante! ", + "Country": "Paese", + "TestimonialTextPlaceholder": "Scrivi una breve storia su come ABP ti ha aiutato a costruire e realizzare il tuo progetto. ", + "PositionPlaceholder": "La tua posizione nella tua azienda.", + "SelectExperienceYearPlaceholder": "Da quanti anni ti occupi di software?", + "FullNamePlaceholder": "Il tuo nome completo.", + "CompanyNamePlaceholder": "Il nome della tua azienda.", + "SelectCompanySizePlaceholder": "Conteggio dei dipendenti", + "ImagePlaceholder": "La tua immagine.", + "SelectCountryPlaceholder": "Il tuo paese.", + "YouAreNotAuthorizedToWriteTestimonial": "Per poter scrivere una lettera di testimonianza, devi effettuare l'accesso.", + "UnAuthorizeTestimonialInfo": "La tua opinione conta! Accedi per condividerla.", + "TheFileIsTooLargeForImage": "La tua immagine del profilo non può essere più di 1 MB", + "ThisExtensionIsNotAllowedForImage": "Questa estensione non è consentita.", + "FileUploadError": "Errore nel caricamento del file", + "TestimonialSend": "Grazie! ", + "Title": "Titolo", + "TitlePlaceholder": "Sviluppatore di software, CTO ecc.", + "Characters": "caratteri" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json index b009c9d347..4d50f0b0e2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework is niet alleen een raamwerk, het is ook een leidraad voor projectontwikkeling/management, omdat het DDD, GenericRepository, DI, Microservice, Modularity trainingen biedt. Zelfs als je het framework zelf niet gaat gebruiken, kun je jezelf ontwikkelen met docs.abp.io dat goed en professioneel is voorbereid. (OpenIddict, Redis, Quartz etc.) \n Omdat veel dingen vooraf zijn gebouwd, verkort dit de projectontwikkelingstijd aanzienlijk. (Zoals inlogpagina, afhandeling van uitzonderingen, gegevensfiltering-zaaien, auditlogboekregistratie, lokalisatie, automatische API-controller enz.) \n Als voorbeeld uit onze app heb ik Local Event Bus gebruikt voor voorraadbeheer. Ik kan dus orderbewegingen beheren door voorraadbeheer te schrijven. \n Het is geweldig om geen tijd te verliezen voor CreationTime, CreatorId. Ze worden automatisch gevuld.", "VideosLoginAndRegisterMessage": "Je moet inloggen om video's te bekijken. Als u dat nog niet heeft gedaan, kunt u een account voor Watch aanmaken.", "Filter": "Filter", - "VideoCourses": "Videocursussen" + "VideoCourses": "Videocursussen", + "TestimonialText": "Jouw getuigenis", + "Position": "Positie", + "ExperienceYear": "Jarenlange ervaring", + "FullName": "Voor-en achternaam", + "CompanySize": "Bedrijfsomvang", + "Image": "Jouw profiel foto", + "TestimonialTitle": "Laten we uw getuigenis horen", + "TestimonialInfo": "Wat onze klanten zeggen, doet ertoe! ", + "Country": "Land", + "TestimonialTextPlaceholder": "Schrijf een kort verhaal over hoe ABP u heeft geholpen bij het opzetten en opleveren van uw project. ", + "PositionPlaceholder": "Jouw functie binnen jouw bedrijf.", + "SelectExperienceYearPlaceholder": "Hoeveel jaar ben je al bezig met softwaredingen?", + "FullNamePlaceholder": "Je volledige naam.", + "CompanyNamePlaceholder": "Je bedrijfsnaam.", + "SelectCompanySizePlaceholder": "Aantal medewerkers", + "ImagePlaceholder": "Jou foto.", + "SelectCountryPlaceholder": "Jouw land.", + "YouAreNotAuthorizedToWriteTestimonial": "Om een getuigenisbrief te kunnen schrijven, moet u ingelogd zijn.", + "UnAuthorizeTestimonialInfo": "Jouw mening is belangrijk! Log in om het te delen.", + "TheFileIsTooLargeForImage": "Je profielfoto mag niet groter zijn dan 1 MB", + "ThisExtensionIsNotAllowedForImage": "Deze verlenging is niet toegestaan.", + "FileUploadError": "Fout bij het uploaden van bestanden", + "TestimonialSend": "Bedankt! ", + "Title": "Titel", + "TitlePlaceholder": "Softwareontwikkelaar, CTO enz.", + "Characters": "tekens" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json index 648f4ab022..ae3280373c 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework to nie tylko framework, to także wytyczne dotyczące opracowywania/zarządzania projektami, ponieważ zapewnia szkolenia z DDD, GenericRepository, DI, Microservice, Modularity. Nawet jeśli nie będziesz korzystał z samego frameworka, możesz rozwijać się dzięki dobrze i profesjonalnie przygotowanemu docs.abp.io. (OpenIddict, Redis, Quartz itp.) \n Ponieważ wiele rzeczy jest gotowych, znacznie skraca to czas opracowywania projektu. (Takie jak strona logowania, obsługa wyjątków, filtrowanie danych, rejestrowanie audytu, lokalizacja, automatyczny kontroler API itp.) \n Jako przykład z naszej aplikacji użyłem lokalnej magistrali zdarzeń do kontroli zapasów. Mogę więc zarządzać ruchami zamówień, pisząc moduł obsługi zapasów. \n Wspaniale jest nie tracić czasu na CreationTime, CreatorId. Są one wypełniane automatycznie.", "VideosLoginAndRegisterMessage": "Aby oglądać filmy, musisz się zalogować. Jeśli jeszcze tego nie zrobiłeś, możesz utworzyć konto na zegarku.", "Filter": "Filtr", - "VideoCourses": "Kursy wideo" + "VideoCourses": "Kursy wideo", + "TestimonialText": "Twoje świadectwo", + "Position": "Pozycja", + "ExperienceYear": "lata doświadczenia", + "FullName": "Pełne imię i nazwisko", + "CompanySize": "Rozmiar firmy", + "Image": "Twoje zdjęcie profilowe", + "TestimonialTitle": "Posłuchajmy Twojej opinii", + "TestimonialInfo": "To, co mówią nasi klienci, ma znaczenie! ", + "Country": "Kraj", + "TestimonialTextPlaceholder": "Napisz krótką historię o tym, jak firma ABP pomogła Ci w budowie i realizacji projektu. ", + "PositionPlaceholder": "Twoje stanowisko w Twojej firmie.", + "SelectExperienceYearPlaceholder": "Ile lat zajmujesz się oprogramowaniem?", + "FullNamePlaceholder": "Twoje pełne imię.", + "CompanyNamePlaceholder": "Nazwa Twojej firmy.", + "SelectCompanySizePlaceholder": "Liczba pracowników", + "ImagePlaceholder": "Twój obraz.", + "SelectCountryPlaceholder": "Twój kraj.", + "YouAreNotAuthorizedToWriteTestimonial": "Aby móc napisać list referencyjny, musisz się zalogować.", + "UnAuthorizeTestimonialInfo": "Twoja opinia ma znaczenie. Zaloguj się, aby ją udostępnić.", + "TheFileIsTooLargeForImage": "Twoje zdjęcie profilowe nie może przekraczać 1 MB", + "ThisExtensionIsNotAllowedForImage": "To rozszerzenie jest niedozwolone.", + "FileUploadError": "Błąd przesyłania pliku", + "TestimonialSend": "Dziękuję! ", + "Title": "Tytuł", + "TitlePlaceholder": "Programista, CTO itp.", + "Characters": "znaki" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json index 6a9d2f4de1..7cc714dd75 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "O ABP Framework não é apenas um framework, é também uma orientação para desenvolvimento/gerenciamento de projetos, pois fornece treinamentos em DDD, GenericRepository, DI, Microservice, Modularidade. Mesmo que você não vá usar o framework em si, você pode se desenvolver com o docs.abp.io que está bem preparado e profissionalmente. (OpenIddict, Redis, Quartz etc.) \n Como muitas coisas são pré-construídas, ele reduz significativamente o tempo de desenvolvimento do projeto. (Como página de login, tratamento de exceções, propagação de filtragem de dados, registro de auditoria, localização, controlador automático de API, etc.) \n Como exemplo de nosso aplicativo, usei o Local Event Bus para controle de estoque. Portanto, sou capaz de gerenciar os movimentos dos pedidos escrevendo o gerenciador de estoque. \n É maravilhoso não perder tempo com CreationTime, CreatorId. Eles são preenchidos automaticamente.", "VideosLoginAndRegisterMessage": "Você deve fazer login para assistir aos vídeos. Você pode criar uma conta para assistir, caso ainda não o tenha feito.", "Filter": "Filtro", - "VideoCourses": "Cursos em vídeo" + "VideoCourses": "Cursos em vídeo", + "TestimonialText": "Seu depoimento", + "Position": "Posição", + "ExperienceYear": "anos de experiência", + "FullName": "Nome completo", + "CompanySize": "Tamanho da empresa", + "Image": "Sua foto de perfil", + "TestimonialTitle": "Vamos ouvir seu depoimento", + "TestimonialInfo": "O que nossos clientes dizem é importante! ", + "Country": "País", + "TestimonialTextPlaceholder": "Escreva uma breve história sobre como a ABP ajudou você a construir e entregar seu projeto. ", + "PositionPlaceholder": "Sua posição na sua empresa.", + "SelectExperienceYearPlaceholder": "Há quantos anos você trabalha com software", + "FullNamePlaceholder": "Seu nome completo.", + "CompanyNamePlaceholder": "O nome da sua empresa.", + "SelectCompanySizePlaceholder": "Contagem de funcionários", + "ImagePlaceholder": "Sua imagem.", + "SelectCountryPlaceholder": "Seu país.", + "YouAreNotAuthorizedToWriteTestimonial": "Para poder escrever uma carta de depoimento, você deve estar logado.", + "UnAuthorizeTestimonialInfo": "Sua opinião é importante, faça login para compartilhá-la.", + "TheFileIsTooLargeForImage": "Sua foto de perfil não pode ter mais de 1 MB", + "ThisExtensionIsNotAllowedForImage": "Esta extensão não é permitida.", + "FileUploadError": "Erro no upload do arquivo", + "TestimonialSend": "Obrigado! ", + "Title": "Título", + "TitlePlaceholder": "Desenvolvedor de software, CTO etc.", + "Characters": "caracteres" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json index aec67baf68..c0dd55092f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework nu este doar un cadru, este și un ghid pentru dezvoltarea/managementul proiectelor, deoarece oferă cursuri DDD, GenericRepository, DI, Microservice, Modularity. Chiar dacă nu veți folosi framework-ul în sine, vă puteți dezvolta cu docs.abp.io, care este bine și pregătit profesional. (OpenIddict, Redis, Quartz etc.) \n Deoarece multe lucruri pre-construite, scurtează semnificativ timpul de dezvoltare a proiectului. (De exemplu, pagina de autentificare, gestionarea excepțiilor, filtrarea datelor, înregistrarea auditului, localizarea, controlerul auto api etc.) \n Ca exemplu din aplicația noastră, am folosit Local Event Bus pentru controlul stocurilor. Așadar, pot gestiona mișcările comenzilor scriind handler de stoc. \n Este minunat să nu pierzi timp pentru CreationTime, CreatorId. Acestea sunt completate automat.", "VideosLoginAndRegisterMessage": "Trebuie să vă conectați pentru a viziona videoclipuri. Puteți crea un cont pentru ceas dacă nu ați făcut-o.", "Filter": "Filtru", - "VideoCourses": "Cursuri video" + "VideoCourses": "Cursuri video", + "TestimonialText": "Marturia ta", + "Position": "Poziţie", + "ExperienceYear": "Ani de experienta", + "FullName": "Numele complet", + "CompanySize": "Marimea companiei", + "Image": "Fotografia de profil", + "TestimonialTitle": "Să auzim mărturia ta", + "TestimonialInfo": "Ceea ce spun clienții noștri contează! ", + "Country": "Țară", + "TestimonialTextPlaceholder": "Scrieți o scurtă poveste despre modul în care ABP v-a ajutat să vă construiți și să vă livrați proiectul. ", + "PositionPlaceholder": "Poziția ta la compania ta.", + "SelectExperienceYearPlaceholder": "Câți ani ai fost în chestii de software", + "FullNamePlaceholder": "Numele tău complet.", + "CompanyNamePlaceholder": "Numele companiei tale.", + "SelectCompanySizePlaceholder": "Numărul de angajați", + "ImagePlaceholder": "Imaginea ta.", + "SelectCountryPlaceholder": "Tara ta.", + "YouAreNotAuthorizedToWriteTestimonial": "Pentru a putea scrie o scrisoare de mărturie, trebuie să vă conectați.", + "UnAuthorizeTestimonialInfo": "Părerea ta contează, conectează-te pentru a o împărtăși.", + "TheFileIsTooLargeForImage": "Fotografia dvs. de profil nu poate depăși 1 MB", + "ThisExtensionIsNotAllowedForImage": "Această extensie nu este permisă.", + "FileUploadError": "Eroare de încărcare a fișierului", + "TestimonialSend": "Mulțumesc! ", + "Title": "Titlu", + "TitlePlaceholder": "Dezvoltator software, CTO etc.", + "Characters": "caractere" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json index 0e612828be..c2c325a12a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json @@ -438,6 +438,32 @@ "Index_Page_Testimonial_2": "ABP Framework — это не только платформа, но и руководство по разработке/управлению проектами, поскольку оно обеспечивает обучение DDD, GenericRepository, DI, Microservice и Modularity. ", "VideosLoginAndRegisterMessage": "Чтобы иметь возможность смотреть видео, вам необходимо войти в систему.", "Filter": "Фильтр", - "VideoCourses": "Видео курсы" + "VideoCourses": "Видео курсы", + "TestimonialText": "Ваш отзыв", + "Position": "Позиция", + "ExperienceYear": "Годы опыта", + "FullName": "Полное имя", + "CompanySize": "Размер компании", + "Image": "Изображение вашего профиля", + "TestimonialTitle": "Давайте послушаем ваше свидетельство", + "TestimonialInfo": "То, что говорят наши клиенты, имеет значение! ", + "Country": "Страна", + "TestimonialTextPlaceholder": "Напишите краткую историю о том, как ABP помогла вам создать и реализовать ваш проект. ", + "PositionPlaceholder": "Ваша должность в вашей компании.", + "SelectExperienceYearPlaceholder": "Сколько лет вы занимаетесь программным обеспечением?", + "FullNamePlaceholder": "Ваше полное имя.", + "CompanyNamePlaceholder": "Название вашей компании.", + "SelectCompanySizePlaceholder": "Количество сотрудников", + "ImagePlaceholder": "Ваш имидж.", + "SelectCountryPlaceholder": "Твоя страна.", + "YouAreNotAuthorizedToWriteTestimonial": "Чтобы иметь возможность написать рекомендательное письмо, вам необходимо войти в систему.", + "UnAuthorizeTestimonialInfo": "Ваше мнение имеет значение. Войдите, чтобы поделиться им.", + "TheFileIsTooLargeForImage": "Размер изображения вашего профиля не может превышать 1 МБ.", + "ThisExtensionIsNotAllowedForImage": "Это расширение не разрешено.", + "FileUploadError": "Ошибка загрузки файла", + "TestimonialSend": "Спасибо! ", + "Title": "Заголовок", + "TitlePlaceholder": "Разработчик программного обеспечения, технический директор и т. д.", + "Characters": "Символы" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json index d16e7a4ae2..2a94075c32 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework nie je len rámec, je to aj návod na vývoj/riadenie projektov, pretože poskytuje školenia DDD, GenericRepository, DI, Microservice, Modularity. Aj keď samotný framework nebudete používať, môžete sa rozvíjať pomocou docs.abp.io, ktoré je dobre a profesionálne pripravené. (OpenIddict, Redis, Quartz atď.) \n Pretože je veľa vecí vopred vytvorených, výrazne to skracuje čas vývoja projektu. (Ako prihlasovacia stránka, spracovanie výnimiek, filtrovanie údajov, zaznamenávanie auditov, lokalizácia, automatický api ovládač atď.) \n Ako príklad z našej aplikácie som použil lokálnu zbernicu udalostí na riadenie zásob. Takže som schopný riadiť pohyby objednávok napísaním skladového manipulátora. \n Je úžasné nestrácať čas pre CreationTime, CreatorId. Plnia sa automaticky.", "VideosLoginAndRegisterMessage": "Ak chcete pozerať videá, musíte sa prihlásiť. Ak ešte nemáte účet pre hodinky, môžete si ho vytvoriť.", "Filter": "Filter", - "VideoCourses": "Video kurzy" + "VideoCourses": "Video kurzy", + "TestimonialText": "Tvoje svedectvo", + "Position": "pozícia", + "ExperienceYear": "roky skúseností", + "FullName": "Celé meno", + "CompanySize": "Veľkosť spoločnosti", + "Image": "Váš profilový obrázok", + "TestimonialTitle": "Vypočujme si vaše svedectvo", + "TestimonialInfo": "Záleží na tom, čo hovoria naši zákazníci! ", + "Country": "Krajina", + "TestimonialTextPlaceholder": "Napíšte krátky príbeh o tom, ako vám ABP pomohla vybudovať a zrealizovať váš projekt. ", + "PositionPlaceholder": "Vaša pozícia vo vašej spoločnosti.", + "SelectExperienceYearPlaceholder": "Koľko rokov sa venuješ softvérovým veciam", + "FullNamePlaceholder": "Tvoje celé meno.", + "CompanyNamePlaceholder": "Názov vašej spoločnosti.", + "SelectCompanySizePlaceholder": "Počet zamestnancov", + "ImagePlaceholder": "Váš obraz.", + "SelectCountryPlaceholder": "Tvoja krajina.", + "YouAreNotAuthorizedToWriteTestimonial": "Aby ste mohli napísať posudkový list, musíte sa prihlásiť.", + "UnAuthorizeTestimonialInfo": "Váš názor je dôležitý! ", + "TheFileIsTooLargeForImage": "Váš profilový obrázok nemôže byť väčší ako 1 MB", + "ThisExtensionIsNotAllowedForImage": "Toto rozšírenie nie je povolené.", + "FileUploadError": "Chyba pri nahrávaní súboru", + "TestimonialSend": "Ďakujem! ", + "Title": "Názov", + "TitlePlaceholder": "Vývojár softvéru, CTO atď.", + "Characters": "znaky" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json index 68622a3fbc..180099a255 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "Ogrodje ABP ni le ogrodje, je tudi vodilo za razvoj/upravljanje projektov, saj zagotavlja usposabljanja DDD, GenericRepository, DI, Microservice, Modularity. Tudi če ne boste uporabljali samega ogrodja, se lahko razvijate z docs.abp.io, ki je dobro in strokovno pripravljen. (OpenIddict, Redis, Quartz itd.) \n Ker je veliko stvari vnaprej zgrajenih, znatno skrajša čas razvoja projekta. (Kot so prijavna stran, obravnavanje izjem, filtriranje-sejanje podatkov, revizijsko beleženje, lokalizacija, samodejni krmilnik api itd.) \n Kot primer iz naše aplikacije sem za nadzor zalog uporabil lokalno vodilo dogodkov. Tako lahko upravljam premike naročil s pisanjem programa za obdelavo zalog. \n Čudovito je ne izgubljati časa za CreationTime, CreatorId. Polnijo se samodejno.", "VideosLoginAndRegisterMessage": "Za ogled videoposnetkov se morate prijaviti. Če ga še niste, lahko ustvarite račun za uro.", "Filter": "Filter", - "VideoCourses": "Video tečaji" + "VideoCourses": "Video tečaji", + "TestimonialText": "Vaše pričevanje", + "Position": "Položaj", + "ExperienceYear": "leta izkušenj", + "FullName": "Polno ime", + "CompanySize": "Velikost podjetja", + "Image": "Vaša profilna slika", + "TestimonialTitle": "Slišimo vaše pričevanje", + "TestimonialInfo": "Pomembno je, kaj pravijo naše stranke! ", + "Country": "Država", + "TestimonialTextPlaceholder": "Napišite kratko zgodbo o tem, kako vam je ABP pomagal zgraditi in izvesti vaš projekt. ", + "PositionPlaceholder": "Vaš položaj v vašem podjetju.", + "SelectExperienceYearPlaceholder": "Koliko let se že ukvarjate s programsko opremo", + "FullNamePlaceholder": "Tvoje polno ime.", + "CompanyNamePlaceholder": "Ime vašega podjetja.", + "SelectCompanySizePlaceholder": "Število zaposlenih", + "ImagePlaceholder": "Vaša slika.", + "SelectCountryPlaceholder": "Tvoja država.", + "YouAreNotAuthorizedToWriteTestimonial": "Če želite napisati izjavno pismo, se morate prijaviti.", + "UnAuthorizeTestimonialInfo": "Vaše mnenje je pomembno! ", + "TheFileIsTooLargeForImage": "Vaša profilna slika ne sme biti večja od 1 MB", + "ThisExtensionIsNotAllowedForImage": "Ta razširitev ni dovoljena.", + "FileUploadError": "Napaka pri nalaganju datoteke", + "TestimonialSend": "Hvala vam! ", + "Title": "Naslov", + "TitlePlaceholder": "Razvijalec programske opreme, tehnični direktor itd.", + "Characters": "znaki" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json index e89cf16576..dca9d06515 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json @@ -387,6 +387,32 @@ "ApplicationModuleExplanation2": "Modüler uygulamanız için modüller oluşturmak üzere bu seçeneği kullanabilirsiniz.", "LeptonXLiteThemeInfo": " Modern ve şık bir Bootstrap UI teması. Üretime hazır bir UI temasına sahip olmak istiyorsanız idealdir. Bu en yeni temadır ve varsayılandır.", "BasicThemeInfo": "Sade Bootstrap renkleri ve stilleri ile minimalist UI teması. Kendi UI temanızı oluşturacaksanız idealdir.", - "Details": "Detaylar" + "Details": "Detaylar", + "TestimonialText": "Referans yazısı", + "Position": "Ünvan", + "ExperienceYear": "Sektörel deneyim", + "FullName": "Ad soyad", + "CompanySize": "Şirket büyüklüğü", + "Image": "Profil resmi", + "TestimonialTitle": "Referanslarınızı paylaşın", + "TestimonialInfo": "Müşterilerimizin ne dediği önemlidir!", + "Country": "Ülke", + "TestimonialTextPlaceholder": "ABP'nin projenizi oluşturmanıza nasıl yardımcı olduğu hakkında kısa bir hikaye yazın.", + "PositionPlaceholder": "Şirketinizdeki pozisyonunuz", + "SelectExperienceYearPlaceholder": "Yazılım sektöründe kaç yıllık tecrübeye sahipsiniz?", + "FullNamePlaceholder": "Tam adınız", + "CompanyNamePlaceholder": "Şirketinizin ismi", + "SelectCompanySizePlaceholder": "Şirketinizin çalışan sayısı", + "ImagePlaceholder": "Profil resminiz", + "SelectCountryPlaceholder": "Ülkeniz", + "YouAreNotAuthorizedToWriteTestimonial": "Referans mektubu yazabilmek için giriş yapmalısınız.", + "UnAuthorizeTestimonialInfo": "Fikriniz bizim için önemli! Paylaşmak için giriş yapınız.", + "TheFileIsTooLargeForImage": "Profil resminiz 1 MB'tan fazla olamaz.", + "ThisExtensionIsNotAllowedForImage": "Bu dosya uzantısınız izin verilmiyor.", + "FileUploadError": "Dosya yükleme hatası", + "TestimonialSend": "Referansınızı paylaştığınız için teşekkürler!", + "Title": "Başlık", + "TitlePlaceholder": "Yazılım Geliştiricisi, CTO vb.", + "Characters": "karakter" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json index 2fa0e5681d..f997c4d0c9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework không chỉ là một framework mà còn là một hướng dẫn để phát triển/quản lý dự án vì nó cung cấp các khóa đào tạo về DDD, GenericRepository, DI, Microservice, moduleity. Ngay cả khi bạn không sử dụng framework, bạn vẫn có thể tự phát triển với docs.abp.io được chuẩn bị kỹ lưỡng và chuyên nghiệp. (OpenIddict, Redis, Quartz, v.v.) \n Bởi vì có nhiều thứ được xây dựng sẵn nên nó rút ngắn đáng kể thời gian phát triển dự án. (Chẳng hạn như trang đăng nhập, xử lý ngoại lệ, lọc dữ liệu, ghi nhật ký kiểm tra, bản địa hóa, bộ điều khiển api tự động, v.v.) \n Là một ví dụ từ ứng dụng của chúng tôi, tôi đã sử dụng Local Event Bus để kiểm soát hàng tồn kho. Vì vậy, tôi có thể quản lý việc di chuyển đơn hàng bằng cách viết trình xử lý hàng tồn kho. \n Thật tuyệt vời khi không lãng phí thời gian cho CreationTime, CreatorId. Chúng được điền tự động.", "VideosLoginAndRegisterMessage": "Bạn phải đăng nhập để xem video. Bạn có thể tạo một tài khoản để xem nếu chưa có.", "Filter": "Lọc", - "VideoCourses": "Khóa học video" + "VideoCourses": "Khóa học video", + "TestimonialText": "Lời chứng thực của bạn", + "Position": "Chức vụ", + "ExperienceYear": "Số năm kinh nghiệm", + "FullName": "Họ và tên", + "CompanySize": "Quy mô công ty", + "Image": "Hình ảnh cá nhân của bạn", + "TestimonialTitle": "Hãy nghe lời chứng thực của bạn", + "TestimonialInfo": "Những gì khách hàng của chúng tôi nói là quan trọng! ", + "Country": "Quốc gia", + "TestimonialTextPlaceholder": "Viết một câu chuyện ngắn gọn về cách ABP đã giúp bạn xây dựng và thực hiện dự án của mình. ", + "PositionPlaceholder": "Vị trí của bạn tại công ty của bạn.", + "SelectExperienceYearPlaceholder": "Bạn đã làm việc trong lĩnh vực phần mềm được bao nhiêu năm", + "FullNamePlaceholder": "Tên đầy đủ của bạn.", + "CompanyNamePlaceholder": "Tên công ty của bạn.", + "SelectCompanySizePlaceholder": "Số nhân viên", + "ImagePlaceholder": "Hình ảnh của bạn.", + "SelectCountryPlaceholder": "Quốc gia của bạn.", + "YouAreNotAuthorizedToWriteTestimonial": "Để có thể viết thư chứng thực, bạn phải đăng nhập.", + "UnAuthorizeTestimonialInfo": "Ý kiến của bạn rất quan trọng! ", + "TheFileIsTooLargeForImage": "Ảnh hồ sơ của bạn không thể lớn hơn 1 MB", + "ThisExtensionIsNotAllowedForImage": "Phần mở rộng này không được phép.", + "FileUploadError": "Lỗi tải tập tin lên", + "TestimonialSend": "Cảm ơn! ", + "Title": "Tiêu đề", + "TitlePlaceholder": "Nhà phát triển phần mềm, CTO, v.v.", + "Characters": "Ký tự" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json index f76f60eada..163308d9cb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework 不仅仅是一个框架,它还是项目开发/管理的指南,因为它提供了 DDD、GenericRepository、DI、Microservice、Modularity 培训。即使你不打算使用框架本身,你也可以通过 docs.abp.io 进行自我开发,它为你提供了精心准备的专业培训。(OpenIddict、Redis、Quartz 等)。\n因为很多东西都是预置的,所以大大缩短了项目开发时间。(如登录页面、异常处理、数据过滤-播种、审计日志、本地化、自动 api 控制器等)。\n以我们的应用程序为例,我将本地事件总线用于库存控制。因此,我可以通过编写库存处理程序来管理订单的变动。\n创建时间、CreatorId 不会浪费时间,它们会自动填入。它们会自动填充。", "VideosLoginAndRegisterMessage": "您必须登录后才能观看视频。如果您还没有注册,可以创建一个账户进行观看。", "Filter": "筛选", - "VideoCourses": "视频课程" + "VideoCourses": "视频课程", + "TestimonialText": "您的感言", + "Position": "位置", + "ExperienceYear": "多年经验", + "FullName": "全名", + "CompanySize": "公司规模", + "Image": "你的头像", + "TestimonialTitle": "让我们听听您的感言", + "TestimonialInfo": "客户的评价很重要!", + "Country": "国家", + "TestimonialTextPlaceholder": "写一个关于 ABP 如何帮助您构建和交付项目的简短故事。 ", + "PositionPlaceholder": "您在公司的职位。", + "SelectExperienceYearPlaceholder": "你从事软件工作多少年了", + "FullNamePlaceholder": "你的全名。", + "CompanyNamePlaceholder": "你的公司名称。", + "SelectCompanySizePlaceholder": "员工人数", + "ImagePlaceholder": "你的形象。", + "SelectCountryPlaceholder": "你的国家。", + "YouAreNotAuthorizedToWriteTestimonial": "为了能够撰写推荐信,您必须登录。", + "UnAuthorizeTestimonialInfo": "您的意见很重要,登录即可分享。", + "TheFileIsTooLargeForImage": "您的个人资料图片不能超过 1 MB", + "ThisExtensionIsNotAllowedForImage": "不允许此扩展。", + "FileUploadError": "文件上传错误", + "TestimonialSend": "谢谢你!", + "Title": "标题", + "TitlePlaceholder": "软件开发人员、CTO等", + "Characters": "字符" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json index 19d109f8b4..80a7132080 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json @@ -440,6 +440,32 @@ "Index_Page_Testimonial_2": "ABP Framework不只是一個框架,它也是專案開發/管理的指南,因為它提供了DDD、GenericRepository、DI、Microservice、Modularity培訓。即使您不打算使用框架本身,您也可以使用經過充分專業準備的 docs.abp.io 進行開發。 (OpenIddict、Redis、Quartz 等) \n由於許多東西是預先建造的,因此它大大縮短了專案開發時間。 (例如登入頁面、異常處理、資料過濾播種、審核日誌記錄、本地化、自動 api 控制器等) \n作為我們應用程式的範例,我使用本地事件總線進行庫存控制。因此,我可以透過編寫庫存處理程序來管理訂單變更。 \n不浪費時間給CreationTime、CreatorId真是太好了。它們會自動填充。", "VideosLoginAndRegisterMessage": "您必須登入才能觀看影片。如果您還沒有,您可以建立手錶帳戶。", "Filter": "篩選", - "VideoCourses": "視訊課程" + "VideoCourses": "視訊課程", + "TestimonialText": "您的感言", + "Position": "位置", + "ExperienceYear": "多年经验", + "FullName": "全名", + "CompanySize": "公司规模", + "Image": "你的头像", + "TestimonialTitle": "让我们听听您的感言", + "TestimonialInfo": "客户的评价很重要!", + "Country": "国家", + "TestimonialTextPlaceholder": "写一个关于 ABP 如何帮助您构建和交付项目的简短故事。 ", + "PositionPlaceholder": "您在公司的职位。", + "SelectExperienceYearPlaceholder": "你从事软件工作多少年了", + "FullNamePlaceholder": "你的全名。", + "CompanyNamePlaceholder": "你的公司名称。", + "SelectCompanySizePlaceholder": "员工人数", + "ImagePlaceholder": "你的形象。", + "SelectCountryPlaceholder": "你的国家。", + "YouAreNotAuthorizedToWriteTestimonial": "为了能够撰写推荐信,您必须登录。", + "UnAuthorizeTestimonialInfo": "您的意见很重要,登录即可分享。", + "TheFileIsTooLargeForImage": "您的个人资料图片不能超过 1 MB", + "ThisExtensionIsNotAllowedForImage": "不允许此扩展。", + "FileUploadError": "文件上传错误", + "TestimonialSend": "谢谢你!", + "Title": "标题", + "TitlePlaceholder": "软件开发人员、CTO等", + "Characters": "字符" } } \ No newline at end of file diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index e2d577c756..ffacc1b10f 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -46,6 +46,7 @@ Here, a list of the options you can configure: * `ApplicationName`: If multiple applications are saving audit logs into a single database, set this property to your application name, so you can distinguish the logs of different applications. If you don't set, it will set from the `IApplicationInfoAccessor.ApplicationName` value, which is the entry assembly name by default. * `IgnoredTypes`: A list of `Type`s to be ignored for audit logging. If this is an entity type, changes for this type of entities will not be saved. This list is also used while serializing the action parameters. * `EntityHistorySelectors`: A list of selectors those are used to determine if an entity type is selected for saving the entity change. See the section below for details. +* `SaveEntityHistoryWhenNavigationChanges` (default: `true`): If you set to true, it will save entity changes to audit log when any navigation property changes. * `Contributors`: A list of `AuditLogContributor` implementations. A contributor is a way of extending the audit log system. See the "Audit Log Contributors" section below. * `AlwaysLogSelectors`: A list of selectors to save the audit logs for the matched criteria. diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/1.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/1.jpg new file mode 100644 index 0000000000..dbdf7c96b0 Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/1.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/2.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/2.jpg new file mode 100644 index 0000000000..4af735c16f Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/2.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/3.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/3.jpg new file mode 100644 index 0000000000..660d086cbc Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/3.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/4.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/4.jpg new file mode 100644 index 0000000000..7babc9ab5b Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/4.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/5.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/5.jpg new file mode 100644 index 0000000000..b1ab47d590 Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/5.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/51.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/51.jpg new file mode 100644 index 0000000000..27aad1a716 Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/51.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/6.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/6.jpg new file mode 100644 index 0000000000..d7f0de7fe6 Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/6.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/8.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/8.jpg new file mode 100644 index 0000000000..c271071526 Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/8.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/9.jpg b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/9.jpg new file mode 100644 index 0000000000..96e99f2565 Binary files /dev/null and b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/9.jpg differ diff --git a/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/POST.md b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/POST.md new file mode 100644 index 0000000000..3fcd4d0da2 --- /dev/null +++ b/docs/en/Blog-Posts/2024-01-14-china-shenzhen-dotnet-conf/POST.md @@ -0,0 +1,20 @@ +# 2024 First Community Event. + +The first .NET community event in 2024 was successfully held in Shenzhen on January 14, 2024. + +This event is co-organized by **Microsoft MVP China Team**, **Microsoft Reactor**, **China .NET Community** and **Shenzhen .NET Club**. + +**ABP.IO** continues to strongly support the community, and we have prepared exquisite gifts for participants. + +The event includes four wonderful technical lectures to reveal big data and AI's potential opportunities and innovations. It is a transfer of knowledge and a platform for communication and cooperation among technology enthusiasts. +![](1.jpg) +![](2.jpg) +![](3.jpg) +![](4.jpg) +![](51.jpg) +![](5.jpg) +![](6.jpg) +![](8.jpg) +![](9.jpg) + +**See you at the next community event!** diff --git a/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md b/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md new file mode 100644 index 0000000000..599e008f93 --- /dev/null +++ b/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md @@ -0,0 +1,170 @@ +![cover](cover.png) + +# ABP now supports .NET 8 + +Recently we have published ABP v8 and with this version The ABP Framework and ABP Commercial both supports for .NET 8, aligning itself with the latest enhancements and new features of the ASP.NET's new version 8. This update ensures that developers using ABP can leverage the new features and improvements of .NET 8, enhancing the capability and performance of their applications. With .NET 8 support, ABP 8.0 likely offers improved performance, enhanced security, and greater efficiency, making it a robust choice for building modern web applications. Here's the summary of .NET 8 features and enhancements: + +## What's new in .NET 8 + +### .NET Aspire + +[.NET Aspire](https://learn.microsoft.com/en-us/dotnet/aspire/) is a tool to observe and manage distributed web applications. It's still preview version. You can manage your containers, executables, logs, traces and metrics of your running web application. For more information see this article https://devblogs.microsoft.com/dotnet/introducing-dotnet-aspire-simplifying-cloud-native-development-with-dotnet-8/ + +### Serialization + +12 features have been implemented for [System.Text.Json](https://learn.microsoft.com/en-us/dotnet/api/system.text.json) serialization and deserialization library with .NET 8. See these enhancements +* [Built-in support for additional types](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#built-in-support-for-additional-types) +* [Source generator](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#source-generator) +* [Interface hierarchies](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#interface-hierarchies) +* [Naming policies](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#naming-policies) +* [Read-only properties](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#read-only-properties) +* [Disable reflection-based default](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#disable-reflection-based-default) +* [New JsonNode API methods](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#new-jsonnode-api-methods) +* [Non-public members](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#non-public-members) +* [Streaming deserialization APIs](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#streaming-deserialization-apis) +* [WithAddedModifier extension method](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#withaddedmodifier-extension-method) +* [New JsonContent.Create overloads](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#new-jsoncontentcreate-overloads) +* [Freeze a JsonSerializerOptions instance](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#freeze-a-jsonserializeroptions-instance) + +### Time abstraction + +You may mock time in test scenarios with the new [TimeProvider class](https://learn.microsoft.com/en-us/dotnet/api/system.timeprovider?view=net-8.0) and [ITimer interface](https://learn.microsoft.com/en-us/dotnet/api/system.threading.itimer?view=net-8.0), which add time abstraction functionality. + +### UTF8 improvements + +The new [IUtf8SpanFormattable](https://learn.microsoft.com/en-us/dotnet/api/system.iutf8spanformattable) interface targets `UTF8` and `Span` instead of `UTF16` and `Span`. Also the new [Utf8.TryWrite](https://learn.microsoft.com/en-us/dotnet/api/system.text.unicode.utf8.trywrite) methods provide a `UTF8` based counterpart to the existing [MemoryExtensions.TryWrite](https://learn.microsoft.com/en-us/dotnet/api/system.memoryextensions.trywrite) methods, which are UTF16-based. + +### Data validation + +There are new validation attributes for cloud-native services. The new properties were added to the [RangeAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute) and [RequiredAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.requiredattribute) types. See the list below for the new validation attributes: + +| New Data Attribute | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| [MinimumIsExclusive](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute.minimumisexclusive#system-componentmodel-dataannotations-rangeattribute-minimumisexclusive), [MaximumIsExclusive](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute.maximumisexclusive#system-componentmodel-dataannotations-rangeattribute-maximumisexclusive) | Checks whether bounds are included in the allowable range | +| [Length](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.lengthattribute) | Checks both lower and upper bounds for strings or collections. For example, `[Length(5, 10)]` requires at least 5 elements and at most 10 elements in a collection | +| [Base64String](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.base64stringattribute) | Checks that a string is a valid Base64 format | +| [AllowedValues](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.allowedvaluesattribute), [DeniedValues](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.deniedvaluesattribute) | Checks if values are from the allowed or disallowed list eg: `[AllowedValues("man", "woman", "child")]` | + + + +### Randomness methods + +The [System.Random](https://learn.microsoft.com/en-us/dotnet/api/system.random) and [System.Security.Cryptography.RandomNumberGenerator](https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.randomnumbergenerator) types present 2 new approaches to handling randomness. + +### Performance-focused types + +* The new [System.Collections.Frozen](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen) namespace includes the collection types [FrozenDictionary](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen.frozendictionary-2) and [FrozenSet](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen.frozenset-1). +* Methods like [MemoryExtensions.IndexOfAny](https://learn.microsoft.com/en-us/dotnet/api/system.memoryextensions.indexofany) look for the first occurrence of *any value in the passed collection*. +* The new [System.Text.CompositeFormat](https://learn.microsoft.com/en-us/dotnet/api/system.text.compositeformat) type is useful for optimizing format strings that aren't known at compile time (for example, if the format string is loaded from a resource file). +* New [System.IO.Hashing.XxHash3](https://learn.microsoft.com/en-us/dotnet/api/system.io.hashing.xxhash3) and [System.IO.Hashing.XxHash128](https://learn.microsoft.com/en-us/dotnet/api/system.io.hashing.xxhash128) types provide implementations of the fast XXH3 and XXH128 hash algorithms. + +### System.Numerics and System.Runtime.Intrinsics + +The [System.Numerics](https://learn.microsoft.com/en-us/dotnet/api/system.numerics) and [System.Runtime.Intrinsics](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.intrinsics) namespaces introduces some hardware improvements with .NET 8. The following structs reimplemented for running with the best performance on ARM64. + +[Vector256](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.intrinsics.vector256-1), [Matrix3x2](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2), and [Matrix4x4](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4) have improved + +### Metrics + +New APIs let you attach key-value pair tags to [Meter](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.metrics.meter) and [Instrument](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.metrics.instrument) objects when you create them. Aggregators of published metric measurements can use the tags to differentiate the aggregated values. + +### Cryptography + +[SHA-3](https://en.wikipedia.org/wiki/SHA-3) (Secure Hash Algorithm 3) is the latest member of the Secure Hash Algorithm family of standards. With .NET 8 SHA-3 is being supported. + +### HTTPS proxy support + +Before [HttpClient](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient) allows hackers to make [man-in-the-middle attack](https://en.wikipedia.org/wiki/Man-in-the-middle_attack) with .NET 8, it creates an encrypted channel between the client and the proxy so all requests can be handled with full privacy. + +### Stream-based ZipFile methods + +The new [ZipFile.ExtractToDirectory](https://learn.microsoft.com/en-us/dotnet/api/system.io.compression.zipfile.extracttodirectory) provides a stream containing a zipped file and extract its contents into the filesystem. + +### Hosted lifecycle services + +Hosted services now have more options for execution during the application lifecycle. [IHostedService](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedservice) provided `StartAsync` and `StopAsync`, and now [IHostedLifecycleService](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice) provides these additional methods: + +- [StartingAsync(CancellationToken)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice.startingasync#microsoft-extensions-hosting-ihostedlifecycleservice-startingasync(system-threading-cancellationtoken)) +- [StartedAsync(CancellationToken)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice.startedasync#microsoft-extensions-hosting-ihostedlifecycleservice-startedasync(system-threading-cancellationtoken)) +- [StoppingAsync(CancellationToken)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice.stoppingasync#microsoft-extensions-hosting-ihostedlifecycleservice-stoppingasync(system-threading-cancellationtoken)) +- [StoppedAsync(CancellationToken)](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostedlifecycleservice.stoppedasync#microsoft-extensions-hosting-ihostedlifecycleservice-stoppedasync(system-threading-cancellationtoken)) + +### Native AOT support + +The option to [publish as Native AOT](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/) was first introduced in .NET 7. Publishing an app with Native AOT creates a fully self-contained version of your app that doesn't need a runtime—everything is included in a single file. .NET 8 brings the following improvements to Native AOT publishing: + +| Operating system | .NET 7 | .NET 8 | +| :-------------------------------------- | :------ | :------ | +| Linux x64 (with `-p:StripSymbols=true`) | 3.76 MB | 1.84 MB | +| Windows x64 | 2.85 MB | 1.77 MB | + +### Target iOS-like platforms with Native AOT + +.NET 8 starts the work to enable Native AOT support for iOS-like platforms. You can now build and run .NET iOS and .NET MAUI applications with Native AOT on the following platforms: + +- `ios` +- `iossimulator` +- `maccatalyst` +- `tvos` +- `tvossimulator` + +### Performance improvements + +.NET 8 includes improvements to code generation and just-in time (JIT) compilation: + +- Arm64 performance improvements +- SIMD improvements +- Support for AVX-512 ISA extensions (see [Vector512 and AVX-512](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#vector512-and-avx-512)) +- Cloud-native improvements +- JIT throughput improvements +- Loop and general optimizations +- Optimized access for fields marked with [ThreadStaticAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.threadstaticattribute) +- Consecutive register allocation. Arm64 has two instructions for table vector lookup, which require that all entities in their tuple operands are present in consecutive registers. +- JIT/NativeAOT can now unroll and auto-vectorize some memory operations with SIMD, such as comparison, copying, and zeroing, if it can determine their sizes at compile time. + + + +### .NET SDK + +This section contains the following subtopics: + +- [CLI-based project evaluation](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#cli-based-project-evaluation) +- [Terminal build output](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#terminal-build-output) +- [Simplified output paths](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#simplified-output-paths) +- ['dotnet workload clean' command](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#dotnet-workload-clean-command) +- ['dotnet publish' and 'dotnet pack' assets](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#dotnet-publish-and-dotnet-pack-assets) +- [Template engine](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#template-engine) +- [Source Link](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#source-link) +- [Source-build SDK](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#source-build-sdk) + +### ASP.NET composite images + +As part of an effort to improve containerization performance, new ASP.NET Docker images are available that have a composite version of the runtime. This composite is built by compiling multiple MSIL assemblies into a single ready-to-run (R2R) output binary. Because these assemblies are embedded into a single image, jitting takes less time, and the startup performance of apps improves. The other big advantage of the composite over the regular ASP.NET image is that the composite images have a smaller size on disk. + +### Source-generated COM interop + +.NET 8 includes a new source generator that supports interoperating with COM interfaces. + +### Minimum support baselines for Linux + +The minimum support baselines for Linux have been updated for .NET 8. .NET is built targeting Ubuntu 16.04, for all architectures. + +### AOT compilation for Android apps + +To decrease app size, .NET and .NET MAUI apps that target Android use *profiled* ahead-of-time (AOT) compilation mode when they're built in Release mode. Profiled AOT compilation affects fewer methods than regular AOT compilation. .NET 8 introduces the `` property that lets you opt-in to further AOT compilation for Android apps to decrease app size even more. + +### Code analysis + +.NET 8 includes several new code analyzers and fixers to help verify that you're using .NET library APIs correctly and efficiently. The following table summarizes the new analyzers. + +### NuGet + +Starting in .NET 8, NuGet verifies signed packages on Linux by default. NuGet continues to verify signed packages on Windows as well. + +### C# Hot Reload supports modifying generics + +Starting in .NET 8, C# Hot Reload [supports modifying generic types and generic methods](https://devblogs.microsoft.com/dotnet/hot-reload-generics/). When you debug console, desktop, mobile, or WebAssembly applications with Visual Studio, you can apply changes to generic classes and generic methods in C# code or Razor pages. For more information, see the [full list of edits supported by Roslyn](https://github.com/dotnet/roslyn/blob/main/docs/wiki/EnC-Supported-Edits.md) + +*References:* + +* https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8 \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/cover.png b/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/cover.png new file mode 100644 index 0000000000..c90e001be3 Binary files /dev/null and b/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/cover.png differ diff --git a/docs/en/Migration-Guides/Abp-8_0.md b/docs/en/Migration-Guides/Abp-8_0.md index ef45d2a79e..6d60c80965 100644 --- a/docs/en/Migration-Guides/Abp-8_0.md +++ b/docs/en/Migration-Guides/Abp-8_0.md @@ -125,9 +125,17 @@ From this version on, instead of injecting the `DaprClient` directly, using the The documentation is already updated according to this suggestion and can be found at https://docs.abp.io/en/abp/8.0/Dapr/Index. So, if you want to learn more you can check the documentation or see the PR: https://github.com/abpframework/abp/pull/18117. +## Use Newer Versions of the SQL Server (SQL Server 14+) + +Starting with EF Core 8.0, EF now generates SQL that is more efficient, but is unsupported on SQL Server 2014 and below. Therefore, if your database provider is SQL Server, then ensure that it's newer than SQL Server 2014. Otherwise, you may get errors due to database creation or while seeding initial data. + +The error is similar to: `Microsoft.Data.SqlClient.SqlException (0x80131904)`. + +> Check the [Entity Framework Core's Breaking Changes](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/breaking-changes#high-impact-changes) documentation for more info. + ## Angular UI -# Guards +### Guards From Angular Documentation; diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md index fdb7569ca0..52344db94b 100644 --- a/docs/en/Startup-Templates/Application.md +++ b/docs/en/Startup-Templates/Application.md @@ -197,7 +197,7 @@ In addition, `.HttpApi.Client.ConsoleTestApp` is a console application (not an a Test projects are prepared for integration testing; * It is fully integrated into the ABP framework and all services in your application. -* It uses SQLite in-memory database for EF Core. For MongoDB, it uses the [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) library. +* It uses SQLite in-memory database for EF Core. For MongoDB, it uses the [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) library. * Authorization is disabled, so any application service can be easily used in tests. You can still create unit tests for your classes which will be harder to write (because you will need to prepare mock/fake objects), but faster to run (because it only tests a single class and skips all the initialization processes). @@ -329,7 +329,7 @@ You should add `routes` property in the `data` object to add a link on the menu ``` In the above example; * If the user is not logged in, authGuard blocks access and redirects to the login page. -* PermissionGuard checks the user's permission with the `requiredPolicy` property of the `routes` object. If the user is not authorized to access the page, the 403 page appears. +* permissionGuard checks the user's permission with the `requiredPolicy` property of the `routes` object. If the user is not authorized to access the page, the 403 page appears. * The `name` property of `routes` is the menu link label. A localization key can be defined. * The `iconClass` property of the `routes` object is the menu link icon class. * The `requiredPolicy` property of the `routes` object is the required policy key to access the page. diff --git a/docs/en/Startup-Templates/Module.md b/docs/en/Startup-Templates/Module.md index faf4cb41a2..aa33ac64df 100644 --- a/docs/en/Startup-Templates/Module.md +++ b/docs/en/Startup-Templates/Module.md @@ -110,7 +110,7 @@ In addition, `.HttpApi.Client.ConsoleTestApp` is a console application (not an a Test projects are prepared for integration testing; - It is fully integrated to ABP framework and all services in your application. -- It uses SQLite in-memory database for EF Core. For MongoDB, it uses the [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) library. +- It uses SQLite in-memory database for EF Core. For MongoDB, it uses the [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) library. - Authorization is disabled, so any application service can be easily used in tests. You can still create unit tests for your classes which will be harder to write (because you will need to prepare mock/fake objects), but faster to run (because it only tests a single class and skips all initialization process). diff --git a/docs/en/Testing.md b/docs/en/Testing.md index 0b4543051b..fe005756ca 100644 --- a/docs/en/Testing.md +++ b/docs/en/Testing.md @@ -431,7 +431,7 @@ ABP Provides a complete infrastructure to write integration tests. All the ABP i #### The Database -The startup template is configured to use **in-memory SQLite** database for the EF Core (for MongoDB, it uses [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) library). So, all the configuration and queries are performed against a real database and you can even test database transactions. +The startup template is configured to use **in-memory SQLite** database for the EF Core (for MongoDB, it uses [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) library). So, all the configuration and queries are performed against a real database and you can even test database transactions. Using in-memory SQLite database has two main advantages; diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index c97bce6bd7..87bc512b5e 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -64,7 +64,7 @@ Each project is used to test the related project. Test projects use the followin {{else if DB=="Mongo"}} -> **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the [data seed system](../Data-Seeding.md)) to prepare a fresh database for every test. +> **[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the [data seed system](../Data-Seeding.md)) to prepare a fresh database for every test. {{end}} diff --git a/docs/en/UI/Angular/Permission-Management.md b/docs/en/UI/Angular/Permission-Management.md index 63d919f599..4cf83acf7e 100644 --- a/docs/en/UI/Angular/Permission-Management.md +++ b/docs/en/UI/Angular/Permission-Management.md @@ -56,7 +56,7 @@ As shown above you can remove elements from DOM with `abpPermission` structural You can use `permissionGuard` if you want to control authenticated user's permission to access to the route during navigation. -* Import the PermissionGuard from @abp/ng.core. +* Import the permissionGuard from @abp/ng.core. * Add `canActivate: [permissionGuard]` to your route object. * Add `requiredPolicy` to the `data` property of your route in your routing module. diff --git a/docs/en/UI/Blazor/Basic-Theme.md b/docs/en/UI/Blazor/Basic-Theme.md index e4124d9a2c..0c3fc83bd0 100644 --- a/docs/en/UI/Blazor/Basic-Theme.md +++ b/docs/en/UI/Blazor/Basic-Theme.md @@ -86,10 +86,10 @@ You can simply override the styles in the Global Styles file of your application See the [Customization / Overriding Components](Customization-Overriding-Components.md) to learn how you can replace components, customize and extend the user interface. ### Overriding the Menu Item -Basic theme supports overriding a single menu item with a custom component. You can create a custom component and call `UseComponent` extension method of Basic Theme in the **MenuContributor**. +Basic theme supports overriding a single menu item with a custom component. You can create a custom component and call `UseComponent` extension method in the **MenuContributor**. ```csharp -using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation; +using Volo.Abp.UI.Navigation; //... diff --git a/docs/pt-BR/Startup-Templates/Application.md b/docs/pt-BR/Startup-Templates/Application.md index 1f8d871d28..24120a9d1c 100644 --- a/docs/pt-BR/Startup-Templates/Application.md +++ b/docs/pt-BR/Startup-Templates/Application.md @@ -192,7 +192,7 @@ Além disso, `.HttpApi.Client.ConsoleTestApp`é um aplicativo de console (não u Projetos de teste são preparados para testes de integração; - É totalmente integrado à estrutura ABP e a todos os serviços em sua aplicação. -- Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) . +- Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) . - A autorização está desabilitada, portanto, qualquer serviço de aplicativo pode ser facilmente usado em testes. Você ainda pode criar testes de unidade para suas classes, que serão mais difíceis de escrever (porque você precisará preparar objetos simulados / falsos), mas mais rápidos de executar (porque apenas testa uma única classe e ignora todo o processo de inicialização). diff --git a/docs/pt-BR/Startup-Templates/Module.md b/docs/pt-BR/Startup-Templates/Module.md index 04984d181c..262e85c342 100644 --- a/docs/pt-BR/Startup-Templates/Module.md +++ b/docs/pt-BR/Startup-Templates/Module.md @@ -110,7 +110,7 @@ Além disso, `.HttpApi.Client.ConsoleTestApp`é um aplicativo de console (não u Projetos de teste são preparados para testes de integração; - É totalmente integrado à estrutura ABP e a todos os serviços em sua aplicação. -- Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca [Mongo2Go](https://github.com/Mongo2Go/Mongo2Go) . +- Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca [EphemeralMongo](https://github.com/asimmon/ephemeral-mongo) . - A autorização está desabilitada, portanto, qualquer serviço de aplicativo pode ser facilmente usado em testes. Você ainda pode criar testes de unidade para suas classes, que serão mais difíceis de escrever (porque você precisará preparar objetos simulados / falsos), mas mais rápidos de executar (porque apenas testa uma única classe e ignora todo o processo de inicialização). diff --git a/docs/zh-Hans/Startup-Templates/Application.md b/docs/zh-Hans/Startup-Templates/Application.md index d6733b8633..b7dfaa4fd5 100644 --- a/docs/zh-Hans/Startup-Templates/Application.md +++ b/docs/zh-Hans/Startup-Templates/Application.md @@ -209,7 +209,7 @@ ABP有[动态 C# API 客户端](../API/Dynamic-CSharp-API-Clients.md)功能,所 测试项目是用于做集成测试的: * 它完全集成到ABP框架和应用程序的所有服务. -* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)库. +* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)库. * 授权被禁用,任何的应用服务都可以在测试中轻松调用. 你依然可以编写单元测试,只不过它很难写(因为你需要准备mock/fake对象),但它的运行速度更快(因为只测试单个类并跳过所有初始化过程). @@ -314,7 +314,7 @@ ABP 配置模块也已经导入到 `AppModule` 中, 以满足可延迟加载 ABP } ``` 在上面的例子中; -* 如果用户没有登录, AuthGuard 会阻塞访问并重定向到登录页面. +* 如果用户没有登录, authGuard 会阻塞访问并重定向到登录页面. * permissionGuard 使用 `rotues` 对象的 `requiredPolicy` 属性检查用户的权限. 如果用户未被授权访问该页, 则显示403页. * `routes` 的 `name` 属性是菜单链接标签. 可以定义本地化 key. * `routes` 对象的 `iconClass` 属性是菜单链接图标类. diff --git a/docs/zh-Hans/Startup-Templates/Module.md b/docs/zh-Hans/Startup-Templates/Module.md index e3f259cc80..d0c0be624f 100644 --- a/docs/zh-Hans/Startup-Templates/Module.md +++ b/docs/zh-Hans/Startup-Templates/Module.md @@ -110,7 +110,7 @@ abp new Acme.IssueManagement -t module --no-ui 测试项目是用于做集成测试的: * 它完全集成到ABP框架和应用程序的所有服务. -* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)库. +* 如果数据库提供程序是EF Core,测试项目会使用SQLite内存数据库,如果是MongoDB,它使用[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)库. * 授权被禁用,任何的应用服务都可以在测试中轻松调用. 你依然可以编写单元测试,只不过它很难写(因为你需要准备mock/fake对象),但它的运行速度更快(因为只测试单个类并跳过所有初始化过程). diff --git a/docs/zh-Hans/Testing.md b/docs/zh-Hans/Testing.md index 5bb72803c8..f2c54ea6a4 100644 --- a/docs/zh-Hans/Testing.md +++ b/docs/zh-Hans/Testing.md @@ -431,7 +431,7 @@ ABP为编写集成测试提供了完整的基础设施. 所有ABP基础设施和 #### 数据库 -启动模板使用EF Core配置**内存中的SQLite**数据库(对于MongoDB, 它使用[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)). 因此, 所有配置和查询都是针对真实数据库执行的, 你甚至可以测试数据库事务. +启动模板使用EF Core配置**内存中的SQLite**数据库(对于MongoDB, 它使用[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)). 因此, 所有配置和查询都是针对真实数据库执行的, 你甚至可以测试数据库事务. 使用内存中的SQLite数据库有两个主要优点: diff --git a/docs/zh-Hans/Tutorials/Part-10.md b/docs/zh-Hans/Tutorials/Part-10.md index da5c23c78f..1ea5f4673f 100644 --- a/docs/zh-Hans/Tutorials/Part-10.md +++ b/docs/zh-Hans/Tutorials/Part-10.md @@ -622,79 +622,79 @@ using System.Threading.Tasks; using Acme.BookStore.Authors; using Shouldly; using Volo.Abp.Application.Dtos; +using Volo.Abp.Modularity; using Volo.Abp.Validation; using Xunit; -namespace Acme.BookStore.Books -{ {{if DB=="Mongo"}} - [Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}} - public class BookAppService_Tests : BookStoreApplicationTestBase +namespace Acme.BookStore.Books; + +public abstract class BookAppService_Tests : BookStoreApplicationTestBase + where TStartupModule : IAbpModule +{ + private readonly IBookAppService _bookAppService; + private readonly IAuthorAppService _authorAppService; + + protected BookAppService_Tests() { - private readonly IBookAppService _bookAppService; - private readonly IAuthorAppService _authorAppService; + _bookAppService = GetRequiredService(); + _authorAppService = GetRequiredService(); + } - public BookAppService_Tests() - { - _bookAppService = GetRequiredService(); - _authorAppService = GetRequiredService(); - } + [Fact] + public async Task Should_Get_List_Of_Books() + { + //Act + var result = await _bookAppService.GetListAsync( + new PagedAndSortedResultRequestDto() + ); + + //Assert + result.TotalCount.ShouldBeGreaterThan(0); + result.Items.ShouldContain(b => b.Name == "1984" && + b.AuthorName == "George Orwell"); + } - [Fact] - public async Task Should_Get_List_Of_Books() - { - //Act - var result = await _bookAppService.GetListAsync( - new PagedAndSortedResultRequestDto() - ); + [Fact] + public async Task Should_Create_A_Valid_Book() + { + var authors = await _authorAppService.GetListAsync(new GetAuthorListDto()); + var firstAuthor = authors.Items.First(); - //Assert - result.TotalCount.ShouldBeGreaterThan(0); - result.Items.ShouldContain(b => b.Name == "1984" && - b.AuthorName == "George Orwell"); - } + //Act + var result = await _bookAppService.CreateAsync( + new CreateUpdateBookDto + { + AuthorId = firstAuthor.Id, + Name = "New test book 42", + Price = 10, + PublishDate = System.DateTime.Now, + Type = BookType.ScienceFiction + } + ); - [Fact] - public async Task Should_Create_A_Valid_Book() - { - var authors = await _authorAppService.GetListAsync(new GetAuthorListDto()); - var firstAuthor = authors.Items.First(); + //Assert + result.Id.ShouldNotBe(Guid.Empty); + result.Name.ShouldBe("New test book 42"); + } - //Act - var result = await _bookAppService.CreateAsync( + [Fact] + public async Task Should_Not_Create_A_Book_Without_Name() + { + var exception = await Assert.ThrowsAsync(async () => + { + await _bookAppService.CreateAsync( new CreateUpdateBookDto { - AuthorId = firstAuthor.Id, - Name = "New test book 42", + Name = "", Price = 10, - PublishDate = System.DateTime.Now, + PublishDate = DateTime.Now, Type = BookType.ScienceFiction } ); + }); - //Assert - result.Id.ShouldNotBe(Guid.Empty); - result.Name.ShouldBe("New test book 42"); - } - - [Fact] - public async Task Should_Not_Create_A_Book_Without_Name() - { - var exception = await Assert.ThrowsAsync(async () => - { - await _bookAppService.CreateAsync( - new CreateUpdateBookDto - { - Name = "", - Price = 10, - PublishDate = DateTime.Now, - Type = BookType.ScienceFiction - } - ); - }); - - exception.ValidationErrors - .ShouldContain(err => err.MemberNames.Any(m => m == "Name")); - } + exception.ValidationErrors + .ShouldContain(err => err.MemberNames.Any(m => m == "Name")); } } ``` diff --git a/docs/zh-Hans/Tutorials/Part-4.md b/docs/zh-Hans/Tutorials/Part-4.md index 75b108cf8b..eac29b8923 100644 --- a/docs/zh-Hans/Tutorials/Part-4.md +++ b/docs/zh-Hans/Tutorials/Part-4.md @@ -67,7 +67,7 @@ {{else if DB=="Mongo"}} -> **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)**库用于模拟MongoDB数据库. 创建一个单独的数据库实例并使用[数据种子系统](../Data-Seeding.md)初始化种子数据,为每个测试准备一个新的数据库. +> **[EphemeralMongo](https://github.com/asimmon/ephemeral-mongo)**库用于模拟MongoDB数据库. 创建一个单独的数据库实例并使用[数据种子系统](../Data-Seeding.md)初始化种子数据,为每个测试准备一个新的数据库. {{end}} @@ -85,36 +85,70 @@ using System.Linq; using System.Threading.Tasks; using Shouldly; using Volo.Abp.Application.Dtos; +using Volo.Abp.Modularity; using Volo.Abp.Validation; using Xunit; -namespace Acme.BookStore.Books -{ {{if DB=="Mongo"}} - [Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}} - public class BookAppService_Tests : BookStoreApplicationTestBase - { - private readonly IBookAppService _bookAppService; +namespace Acme.BookStore.Books; - public BookAppService_Tests() - { - _bookAppService = GetRequiredService(); - } +public abstract class BookAppService_Tests : BookStoreApplicationTestBase + where TStartupModule : IAbpModule +{ + private readonly IBookAppService _bookAppService; - [Fact] - public async Task Should_Get_List_Of_Books() - { - //Act - var result = await _bookAppService.GetListAsync( - new PagedAndSortedResultRequestDto() - ); + protected BookAppService_Tests() + { + _bookAppService = GetRequiredService(); + } - //Assert - result.TotalCount.ShouldBeGreaterThan(0); - result.Items.ShouldContain(b => b.Name == "1984"); - } + [Fact] + public async Task Should_Get_List_Of_Books() + { + //Act + var result = await _bookAppService.GetListAsync( + new PagedAndSortedResultRequestDto() + ); + + //Assert + result.TotalCount.ShouldBeGreaterThan(0); + result.Items.ShouldContain(b => b.Name == "1984"); } } ```` +{{if DB == "EF"}} +添加 `BookAppService_Tests` 的实现类,命名为 `EfCoreBookAppService_Tests` ,并放置在 `EntityFrameworkCore\Applications\Books` 命名空间 (文件夹)下,在 `Acme.BookStore.EntityFrameworkCore.Tests` 项目中: + +````csharp +using Acme.BookStore.Books; +using Xunit; + +namespace Acme.BookStore.EntityFrameworkCore.Applications.Books; + +[Collection(BookStoreTestConsts.CollectionDefinitionName)] +public class EfCoreBookAppService_Tests : BookAppService_Tests +{ + +} +```` +{{end}} + +{{if DB == "Mongo"}} +添加 `BookAppService_Tests` 的实现类,命名为`MongoDBBookAppService_Tests` ,并放置在 `MongoDb\Applications\Books` 命名空间 (文件夹)下,在 `Acme.BookStore.MongoDB.Tests` 项目中: + +````csharp +using Acme.BookStore.MongoDB; +using Acme.BookStore.Books; +using Xunit; + +namespace Acme.BookStore.MongoDb.Applications.Books; + +[Collection(BookStoreTestConsts.CollectionDefinitionName)] +public class MongoDBBookAppService_Tests : BookAppService_Tests +{ + +} +```` +{{end}} * 测试方法 `Should_Get_List_Of_Books` 直接使用 `BookAppService.GetListAsync` 方法来获取用户列表,并执行检查. * 我们可以安全地检查 "1984" 这本书的名称,因为我们知道这本书可以在数据库中找到,我们已将其添加到种子数据中. diff --git a/docs/zh-Hans/Tutorials/Part-8.md b/docs/zh-Hans/Tutorials/Part-8.md index 5c58d1b524..2c12aa1f78 100644 --- a/docs/zh-Hans/Tutorials/Part-8.md +++ b/docs/zh-Hans/Tutorials/Part-8.md @@ -497,77 +497,112 @@ namespace Acme.BookStore using System; using System.Threading.Tasks; using Shouldly; +using Volo.Abp.Modularity; using Xunit; -namespace Acme.BookStore.Authors -{ {{if DB=="Mongo"}} - [Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}} - public class AuthorAppService_Tests : BookStoreApplicationTestBase +namespace Acme.BookStore.Authors; + +public abstract class AuthorAppService_Tests : BookStoreApplicationTestBase + where TStartupModule : IAbpModule +{ + private readonly IAuthorAppService _authorAppService; + + protected AuthorAppService_Tests() { - private readonly IAuthorAppService _authorAppService; + _authorAppService = GetRequiredService(); + } - public AuthorAppService_Tests() - { - _authorAppService = GetRequiredService(); - } + [Fact] + public async Task Should_Get_All_Authors_Without_Any_Filter() + { + var result = await _authorAppService.GetListAsync(new GetAuthorListDto()); - [Fact] - public async Task Should_Get_All_Authors_Without_Any_Filter() - { - var result = await _authorAppService.GetListAsync(new GetAuthorListDto()); + result.TotalCount.ShouldBeGreaterThanOrEqualTo(2); + result.Items.ShouldContain(author => author.Name == "George Orwell"); + result.Items.ShouldContain(author => author.Name == "Douglas Adams"); + } - result.TotalCount.ShouldBeGreaterThanOrEqualTo(2); - result.Items.ShouldContain(author => author.Name == "George Orwell"); - result.Items.ShouldContain(author => author.Name == "Douglas Adams"); - } + [Fact] + public async Task Should_Get_Filtered_Authors() + { + var result = await _authorAppService.GetListAsync( + new GetAuthorListDto {Filter = "George"}); - [Fact] - public async Task Should_Get_Filtered_Authors() - { - var result = await _authorAppService.GetListAsync( - new GetAuthorListDto {Filter = "George"}); + result.TotalCount.ShouldBeGreaterThanOrEqualTo(1); + result.Items.ShouldContain(author => author.Name == "George Orwell"); + result.Items.ShouldNotContain(author => author.Name == "Douglas Adams"); + } - result.TotalCount.ShouldBeGreaterThanOrEqualTo(1); - result.Items.ShouldContain(author => author.Name == "George Orwell"); - result.Items.ShouldNotContain(author => author.Name == "Douglas Adams"); - } + [Fact] + public async Task Should_Create_A_New_Author() + { + var authorDto = await _authorAppService.CreateAsync( + new CreateAuthorDto + { + Name = "Edward Bellamy", + BirthDate = new DateTime(1850, 05, 22), + ShortBio = "Edward Bellamy was an American author..." + } + ); + + authorDto.Id.ShouldNotBe(Guid.Empty); + authorDto.Name.ShouldBe("Edward Bellamy"); + } - [Fact] - public async Task Should_Create_A_New_Author() + [Fact] + public async Task Should_Not_Allow_To_Create_Duplicate_Author() + { + await Assert.ThrowsAsync(async () => { - var authorDto = await _authorAppService.CreateAsync( + await _authorAppService.CreateAsync( new CreateAuthorDto { - Name = "Edward Bellamy", - BirthDate = new DateTime(1850, 05, 22), - ShortBio = "Edward Bellamy was an American author..." + Name = "Douglas Adams", + BirthDate = DateTime.Now, + ShortBio = "..." } ); + }); + } - authorDto.Id.ShouldNotBe(Guid.Empty); - authorDto.Name.ShouldBe("Edward Bellamy"); - } + //TODO: Test other methods... +} +```` - [Fact] - public async Task Should_Not_Allow_To_Create_Duplicate_Author() - { - await Assert.ThrowsAsync(async () => - { - await _authorAppService.CreateAsync( - new CreateAuthorDto - { - Name = "Douglas Adams", - BirthDate = DateTime.Now, - ShortBio = "..." - } - ); - }); - } +{{if DB == "EF"}} +添加 `AuthorAppService_Tests` 的实现类,命名为 `EfCoreAuthorAppService_Tests` ,并放置在 `EntityFrameworkCore\Applications\Authors` 命名空间 (文件夹)下,在 `Acme.BookStore.EntityFrameworkCore.Tests` 项目中: + +````csharp +using Acme.BookStore.Authors; +using Xunit; + +namespace Acme.BookStore.EntityFrameworkCore.Applications.Authors; + +[Collection(BookStoreTestConsts.CollectionDefinitionName)] +public class EfCoreAuthorAppService_Tests : AuthorAppService_Tests +{ - //TODO: Test other methods... - } } ```` +{{end}} + +{{if DB == "Mongo"}} +添加 `AuthorAppService_Tests` 的实现类,命名为 `MongoDBAuthorAppService_Tests` ,并放置在 `MongoDb\Applications\Authors` 命名空间 (文件夹)下,在 `Acme.BookStore.MongoDB.Tests` 项目中: + +````csharp +using Acme.BookStore.MongoDB; +using Acme.BookStore.Authors; +using Xunit; + +namespace Acme.BookStore.MongoDb.Applications.Authors; + +[Collection(BookStoreTestConsts.CollectionDefinitionName)] +public class MongoDBAuthorAppService_Tests : AuthorAppService_Tests +{ + +} +```` +{{end}} 完成应用服务方法的测试, 它们应该很容易理解. diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs index 5fc90eebd9..50e911074f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs @@ -22,11 +22,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; public class AbpDynamicFormTagHelperService : AbpTagHelperService { - private readonly HtmlEncoder _htmlEncoder; - private readonly IHtmlGenerator _htmlGenerator; - private readonly IServiceProvider _serviceProvider; - private readonly IStringLocalizer _localizer; - private List _models = new(); + protected HtmlEncoder HtmlEncoder { get; } + protected IHtmlGenerator HtmlGenerator { get; } + protected IServiceProvider _serviceProvider { get; } + protected IStringLocalizer Localizer { get; } + protected List Models = new(); public AbpDynamicFormTagHelperService( HtmlEncoder htmlEncoder, @@ -34,15 +34,15 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService localizer) { - _htmlEncoder = htmlEncoder; - _htmlGenerator = htmlGenerator; + HtmlEncoder = htmlEncoder; + HtmlGenerator = htmlGenerator; _serviceProvider = serviceProvider; - _localizer = localizer; + Localizer = localizer; } public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - _models = GetModels(context, output); + Models = GetModels(context, output); var list = InitilizeFormGroupContentsContext(context, output); NormalizeTagMode(context, output); @@ -64,7 +64,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService(); abpDateInputTagHelper.AspFor = model; @@ -199,7 +199,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService()!; @@ -223,13 +223,13 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService x.ModelExplorer).SingleOrDefault(x => x != model.ModelExplorer && x.GetAttribute()?.PickerId == pickerId); + otherModel = Models.Select(x => x.ModelExplorer).SingleOrDefault(x => x != model.ModelExplorer && x.GetAttribute()?.PickerId == pickerId); return otherModel != null; } - private static bool IsDateRangeGroup(ModelExplorer modelModelExplorer) + protected virtual bool IsDateRangeGroup(ModelExplorer modelModelExplorer) { return modelModelExplorer.GetAttribute() != null; } @@ -245,7 +245,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService(); var attributes = new TagHelperAttributeList { new TagHelperAttribute("type", "submit") }; - abpButtonTagHelper.Text = _localizer["Submit"]; + abpButtonTagHelper.Text = Localizer["Submit"]; abpButtonTagHelper.ButtonType = AbpButtonType.Primary; - return await abpButtonTagHelper.RenderAsync(attributes, context, _htmlEncoder, "button", TagMode.StartTagAndEndTag); + return await abpButtonTagHelper.RenderAsync(attributes, context, HtmlEncoder, "button", TagMode.StartTagAndEndTag); } protected virtual async Task ProcessInputGroupAsync(TagHelperContext context, TagHelperOutput output, ModelExpression model) @@ -293,7 +293,7 @@ public class AbpDynamicFormTagHelperService : AbpTagHelperService GetModels(TagHelperContext context, TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs index 9e03ec800c..2c2011ac1e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs @@ -68,7 +68,6 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp protected readonly IAbpTagHelperLocalizer TagHelperLocalizer; protected virtual string TagName { get; set; } = "abp-date-picker"; protected IStringLocalizer L { get; } - protected InputTagHelper InputTagHelper { get; set; } protected abstract TagHelperOutput TagHelperOutput { get; set; } protected AbpDatePickerBaseTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator, @@ -81,8 +80,6 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp ServiceProvider = serviceProvider; L = l; TagHelperLocalizer = tagHelperLocalizer; - - InputTagHelper = new InputTagHelper(Generator) { InputTypeName = "text" }; } protected virtual T? GetAttribute() where T : Attribute @@ -95,19 +92,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - TagHelperOutput = new TagHelperOutput("input", GetInputAttributes(context, output), (_, _) => Task.FromResult(new DefaultTagHelperContent())); - - InputTagHelper.ViewContext = TagHelper.ViewContext; - - if (!TagHelper.Name.IsNullOrEmpty()) - { - InputTagHelper.Name = TagHelper.Name; - } - - if (!TagHelper.Value.IsNullOrEmpty()) - { - InputTagHelper.Value = TagHelper.Value; - } + TagHelperOutput = TagHelperOutput = new TagHelperOutput("input", GetInputAttributes(context, output), (_, _) => Task.FromResult(new DefaultTagHelperContent())); AddDisabledAttribute(TagHelperOutput); AddAutoFocusAttribute(TagHelperOutput); @@ -131,7 +116,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp var labelContent = await GetLabelAsHtmlAsync(context, output, TagHelperOutput); var infoContent = GetInfoAsHtml(context, output, TagHelperOutput); - var validationContent = await GetValidationAsHtmlAsync(context, output); + var validationContent = await GetValidationAsHtmlAsync(context, TagHelperOutput); var inputGroup = new TagHelperOutput("div", new TagHelperAttributeList(new[] { new TagHelperAttribute("class", "input-group") }), @@ -270,12 +255,12 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp if (options.MinDate != null) { - attrList.Add("data-min-date", options.MinDate); + attrList.Add("data-min-date", options.MinDate?.ToString("O")); } if (options.MaxDate != null) { - attrList.Add("data-max-date", options.MaxDate); + attrList.Add("data-max-date", options.MaxDate?.ToString("O")); } if (options.MaxSpan != null) @@ -754,16 +739,37 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp }; } - protected abstract Task GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output); + protected virtual Task GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output) + { + var @for = GetModelExpression(); + if (@for == null) + { + return Task.FromResult(string.Empty); + } + + return GetValidationAsHtmlByInputAsync(context, output, @for); + } protected virtual async Task GetValidationAsHtmlByInputAsync(TagHelperContext context, TagHelperOutput output, - [NotNull]InputTagHelper inputTag) + [NotNull]ModelExpression @for) { var validationMessageTagHelper = - new ValidationMessageTagHelper(Generator) { For = inputTag.For, ViewContext = TagHelper.ViewContext }; + new ValidationMessageTagHelper(Generator) { For = @for, ViewContext = TagHelper.ViewContext }; - var attributeList = new TagHelperAttributeList { { "class", "text-danger col-auto" } }; + var attributeList = new TagHelperAttributeList { { "class", "text-danger" } }; + + if(!output.Attributes.TryGetAttribute("name", out var nameAttribute) || nameAttribute == null || nameAttribute.Value == null) + { + if (nameAttribute != null) + { + output.Attributes.Remove(nameAttribute); + } + nameAttribute = new TagHelperAttribute("name", "date_" + Guid.NewGuid().ToString("N")); + output.Attributes.Add(nameAttribute); + } + + attributeList.Add("data-valmsg-for", nameAttribute.Value); return await validationMessageTagHelper.RenderAsync(attributeList, context, Encoder, "span", TagMode.StartTagAndEndTag); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs index d135d28667..a2abf7c368 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs @@ -77,11 +77,6 @@ public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output) - { - return DateTagHelper != null ? await GetValidationAsHtmlByInputAsync(context, output, DateTagHelper) : string.Empty; - } - protected override string GetExtraInputHtml(TagHelperContext context, TagHelperOutput output) { return DateTagHelperOutput?.Render(Encoder)!; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs index 3c2b8aaa03..f21c2a1507 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDateRangePickerTagHelperService.cs @@ -112,23 +112,6 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ protected override ModelExpression? GetModelExpression() { - return TagHelper.AspForStart; - } - - protected async override Task GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output) - { - var validationHtml = string.Empty; - - if (StartDateTagHelper != null) - { - validationHtml += await GetValidationAsHtmlByInputAsync(context, output, StartDateTagHelper); - } - - if (EndDateTagHelper != null) - { - validationHtml += await GetValidationAsHtmlByInputAsync(context, output, EndDateTagHelper); - } - - return validationHtml; + return TagHelper.AspForStart ?? TagHelper.AspForEnd; } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js index b5d2dec80d..f45f0b1ff8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js @@ -205,7 +205,7 @@ var today = moment(); $dateRangePicker.setStartDate(today); $dateRangePicker.setEndDate(today); - + if(options.singleDatePicker && options.autoApply){ $dateRangePicker.clickApply(); }else{ @@ -366,6 +366,14 @@ }); } + if (options.maxDate){ + options.maxDate = convertToMoment(options.maxDate, options); + } + + if (options.minDate){ + options.minDate = convertToMoment(options.minDate, options); + } + if (typeof options.template !== 'string' && !(options.template instanceof $)) options.template = '
' + @@ -433,13 +441,13 @@ return ''; } - + function createInitialAbpDate(date, options) { date = convertToMoment(date, options, undefined, options.isUtc); if (options.isUtc) { date = date.local(); } - + return AbpDate(date, options); } @@ -468,8 +476,9 @@ var singleOpenAndClearButton = options.singleOpenAndClearButton && $clearButton.length > 0 && $openButton.length > 0; var startDate = createInitialAbpDate(options.startDate || options.date || (options.autoUpdateInput ? new Date() : undefined), options); + var oldStartDate = AbpDate(undefined, options); - + var endDate = createInitialAbpDate(options.endDate || (options.autoUpdateInput ? new Date() : undefined), options); var oldEndDate = AbpDate(undefined, options); @@ -544,6 +553,10 @@ triggerDateChange($input, startDate, isDateRangePickerTrigger); } } + + if(isTrigger || isInputTrigger || isDateRangePickerTrigger){ + triggerValidation(); + } } function setDataDates(date, $selfInput, prefix){ @@ -553,6 +566,25 @@ $input.data(prefix + 'date', date); } + function triggerValidation() { + checkValidity($startDateInput); + checkValidity($endDateInput); + checkValidity($dateInput); + checkValidity($input); + } + + function checkValidity($selfInput) { + if (!$selfInput) { + return; + } + + if($selfInput.closest('form').length === 0) { + return; + } + + $selfInput.valid(); + } + function triggerDateChange($selfInput, value, isDateRangePickerTrigger) { $selfInput.trigger('change'); if(isDateRangePickerTrigger !== false){ @@ -583,7 +615,7 @@ }else{ picker.setStartDate(convertToMoment(startDate, options, options.inputDateFormat)); } - + if(singleDatePicker){ picker.setEndDate(picker.startDate); }else if(isEmptyDate(endDate, options)){ diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs index 30b32c3587..f9f5284b29 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs @@ -53,6 +53,12 @@ public class AbpAuditingOptions public IEntityHistorySelectorList EntityHistorySelectors { get; } + /// + /// Default: true. + /// Save entity changes to audit log when any navigation property changes. + /// + public bool SaveEntityHistoryWhenNavigationChanges { get; set; } = true; + //TODO: Move this to asp.net core layer or convert it to a more dynamic strategy? /// /// Default: false. diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs index 971deab5ca..a87436510b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs @@ -1,6 +1,7 @@ using System.Text; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Cli.Commands; +using Volo.Abp.Cli.Commands.Internal; using Volo.Abp.Cli.Http; using Volo.Abp.Cli.ServiceProxying; using Volo.Abp.Cli.ServiceProxying.Angular; @@ -68,6 +69,7 @@ public class AbpCliCoreModule : AbpModule options.Commands[CleanCommand.Name] = typeof(CleanCommand); options.Commands[CliCommand.Name] = typeof(CliCommand); options.Commands[ClearDownloadCacheCommand.Name] = typeof(ClearDownloadCacheCommand); + options.Commands[RecreateInitialMigrationCommand.Name] = typeof(RecreateInitialMigrationCommand); options.DisabledModulesToAddToSolution.Add("Volo.Abp.LeptonXTheme.Pro"); options.DisabledModulesToAddToSolution.Add("Volo.Abp.LeptonXTheme.Lite"); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Internal/RecreateInitialMigrationCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Internal/RecreateInitialMigrationCommand.cs new file mode 100644 index 0000000000..a0a374a89a --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Internal/RecreateInitialMigrationCommand.cs @@ -0,0 +1,89 @@ +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Utils; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Cli.Commands.Internal; + +public class RecreateInitialMigrationCommand : IConsoleCommand, ITransientDependency +{ + public const string Name = "recreate-initial-migration"; + + public ILogger Logger { get; set; } + + protected CmdHelper CmdHelper { get; } + + public RecreateInitialMigrationCommand(CmdHelper cmdHelper) + { + CmdHelper = cmdHelper; + Logger = NullLogger.Instance; + } + + public virtual Task ExecuteAsync(CommandLineArgs commandLineArgs) + { + var csprojFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.csproj", SearchOption.AllDirectories) + .Where(x => x.Contains("templates") || x.Contains("test-app")) + .Where(x => File.ReadAllText(x).Contains("Microsoft.EntityFrameworkCore.Tools")).ToList(); + + var projectCounts = 0; + foreach (var csprojFile in csprojFiles) + { + var projectDir = Path.GetDirectoryName(csprojFile)!; + + if (!Directory.Exists(Path.Combine(projectDir, "Migrations"))) + { + continue; + } + + Logger.LogInformation($"Recreating migrations for {csprojFile}"); + + if (Directory.Exists(Path.Combine(projectDir, "Migrations"))) + { + Directory.Delete(Path.Combine(projectDir, "Migrations"), true); + } + + var separateDbContext = false; + if (Directory.Exists(Path.Combine(projectDir, "TenantMigrations"))) + { + Directory.Delete(Path.Combine(projectDir, "TenantMigrations"), true); + separateDbContext = true; + } + if (!separateDbContext) + { + CmdHelper.RunCmd($"dotnet ef migrations add Initial", workingDirectory: projectDir); + } + else + { + CmdHelper.RunCmd($"dotnet ef migrations add Initial --context MyProjectNameDbContext", workingDirectory: projectDir); + CmdHelper.RunCmd($"dotnet ef migrations add Initial --context MyProjectNameTenantDbContext --output-dir TenantMigrations", workingDirectory: projectDir); + } + + if (Directory.Exists(Path.Combine(projectDir, "Logs"))) + { + Directory.Delete(Path.Combine(projectDir, "Logs"), true); + } + + projectCounts++; + } + + Logger.LogInformation(projectCounts > 0 + ? $"Done! All {projectCounts} migrations recreated." + : "No project found to recreate migrations."); + + return Task.CompletedTask; + } + + public string GetUsageInfo() + { + return GetShortDescription(); + } + + public string GetShortDescription() + { + return "This is a internal command. Please run 'abp recreate-initial-migration' command in abp or volo root directory."; + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStep.cs index b6408fb3e2..4a88ada34a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStep.cs @@ -372,7 +372,7 @@ public class ChangeThemeStep : ProjectBuildPipelineStep return; } - lines[lineIndex] = lines[lineIndex].Replace(lines[lineIndex], $"\t"); + lines[lineIndex] = lines[lineIndex].Replace(lines[lineIndex], $"\t\t\n"); file.SetLines(lines); } @@ -568,7 +568,7 @@ public class ChangeThemeStep : ProjectBuildPipelineStep private static void ChangeThemeToBasicForMvcProjects(ProjectBuildContext context, string defaultThemeName) { var projectNames = new[] -{ + { ".Web", ".HttpApi.Host", ".AuthServer", ".Web.Public", ".Web.Public.Host", "" //for app-nolayers-mvc }; @@ -608,45 +608,46 @@ public class ChangeThemeStep : ProjectBuildPipelineStep { var projects = new Dictionary { - {"Blazor", "MyProjectNameBlazorModule"}, - {"Blazor.Server.Tiered", "MyProjectNameBlazorModule"}, - {"Blazor.Server", "MyProjectNameModule"}, - {"Blazor.Server.Mongo", "MyProjectNameModule"} + {".Blazor", "MyProjectNameBlazorModule"}, + {".Blazor.Server.Tiered", "MyProjectNameBlazorModule"}, + {".Blazor.Server", "MyProjectNameModule"}, + {"Blazor.Server.Mongo", "MyProjectNameModule"}, + {"", ""} //for app-nolayers blazor-server }; foreach (var project in projects) { ReplacePackageReferenceWithProjectReference( context, - $"/MyCompanyName.MyProjectName.{project.Key}/MyCompanyName.MyProjectName.{project.Key}.csproj", - $"Volo.Abp.AspNetCore.Components.Server.{defaultThemeName}Theme", - @"..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj" + $"/MyCompanyName.MyProjectName{project.Key}/MyCompanyName.MyProjectName{project.Key}.csproj", + $"Volo.Abp.AspNetCore.Components.Server.{defaultThemeName}", + @"..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Components.Server.BasicTheme\Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj" ); ReplacePackageReferenceWithProjectReference( context, - $"/MyCompanyName.MyProjectName.{project.Key}/MyCompanyName.MyProjectName.{project.Key}.csproj", + $"/MyCompanyName.MyProjectName{project.Key}/MyCompanyName.MyProjectName{project.Key}.csproj", $"Volo.Abp.AspNetCore.Mvc.UI.Theme.{defaultThemeName}", - @"..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Components.Server.BasicTheme\Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj" + @"..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj" ); ReplaceAllKeywords( context, - $"/MyCompanyName.MyProjectName.{project.Key}/Pages/_Host.cshtml", + $"/Pages/_Host.cshtml", $"{defaultThemeName}Theme.Components", Basic ); ReplaceAllKeywords( context, - $"/MyCompanyName.MyProjectName.{project.Key}/{project.Value}.cs", + $"/MyCompanyName.MyProjectName{project.Key}/{project.Value}.cs", defaultThemeName, - Basic + Basic + "Theme" ); ReplaceAllKeywords( context, - $"/MyCompanyName.MyProjectName.{project.Key}/Pages/_Host.cshtml", + $"/Pages/_Host.cshtml", defaultThemeName, Basic ); @@ -682,7 +683,7 @@ public class ChangeThemeStep : ProjectBuildPipelineStep ReplaceAllKeywords( context, - $"/MyCompanyName.MyProjectName.{projectName}/Pages/_Host.cshtml", + $"/Pages/_Host.cshtml", LeptonX, Lepton ); @@ -731,7 +732,7 @@ public class ChangeThemeStep : ProjectBuildPipelineStep ReplaceAllKeywords( context, - $"/MyCompanyName.MyProjectName.{projectName}/Pages/_Host.cshtml", + $"/Pages/_Host.cshtml", LeptonX, Lepton ); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs index 7bbba5c733..8b9df09ca5 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs @@ -346,6 +346,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo var blazorServerUiPackageName = isProTemplate ? "@volo/aspnetcore.components.server.leptonxtheme" : "@abp/aspnetcore.components.server.leptonxlitetheme"; var blazorServerPackageJsonFilePaths = new List { + "/MyCompanyName.MyProjectName/package.json", "/MyCompanyName.MyProjectName.Blazor/package.json", "/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json" }; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index ba85c48aeb..08152db2f8 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -594,10 +594,11 @@ public class SolutionModuleAdder : ITransientDependency { var args = new CommandLineArgs("new", module.Name); - args.Options.Add("t", newProTemplate ? ModuleProTemplate.TemplateName : ModuleTemplate.TemplateName); - args.Options.Add("v", version); - args.Options.Add("o", Path.Combine(modulesFolderInSolution, module.Name)); - args.Options.Add("sib", true.ToString()); + args.Options.Add(ProjectCreationCommandBase.Options.Template.Short, newProTemplate ? ModuleProTemplate.TemplateName : ModuleTemplate.TemplateName); + args.Options.Add(ProjectCreationCommandBase.Options.Version.Short, version); + args.Options.Add(ProjectCreationCommandBase.Options.OutputFolder.Short, Path.Combine(modulesFolderInSolution, module.Name)); + args.Options.Add(ProjectCreationCommandBase.Options.SkipInstallingLibs.Short, true.ToString()); + args.Options.Add(ProjectCreationCommandBase.Options.SkipBundling.Long, true.ToString()); await NewCommand.ExecuteAsync(args); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs index dc3754be3b..5229e9aab6 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs @@ -85,7 +85,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency case EntityState.Modified: changeType = IsDeleted(entityEntry) ? EntityChangeType.Deleted : EntityChangeType.Updated; break; - case EntityState.Unchanged: + case EntityState.Unchanged when HasNavigationPropertiesChanged(entityEntry): changeType = EntityChangeType.Updated; // Navigation property changes. break; case EntityState.Detached: @@ -186,7 +186,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency } } - if (entityEntry.State == EntityState.Unchanged) + if (Options.SaveEntityHistoryWhenNavigationChanges && entityEntry.State == EntityState.Unchanged) { foreach (var navigation in entityEntry.Navigations) { @@ -227,21 +227,6 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency return false; } - if (entityEntry.State == EntityState.Unchanged) - { - if (entityEntry.Navigations.Any(navigationEntry => navigationEntry.IsModified)) - { - return true; - } - - if (entityEntry.Navigations.Where(x => x is ReferenceEntry).Cast().Any(x => x.TargetEntry != null && x.TargetEntry.State == EntityState.Modified)) - { - return true; - } - - return false; - } - var entityType = entityEntry.Metadata.ClrType; if (!EntityHelper.IsEntity(entityType) && !EntityHelper.IsValueObject(entityType)) @@ -249,12 +234,20 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency return false; } - if (AuditingHelper.IsEntityHistoryEnabled(entityType)) + var isEntityHistoryEnabled = AuditingHelper.IsEntityHistoryEnabled(entityType); + if (isEntityHistoryEnabled && HasNavigationPropertiesChanged(entityEntry)) { return true; } - return defaultValue; + return isEntityHistoryEnabled || defaultValue; + } + + protected virtual bool HasNavigationPropertiesChanged(EntityEntry entityEntry) + { + return Options.SaveEntityHistoryWhenNavigationChanges && entityEntry.State == EntityState.Unchanged && + (entityEntry.Navigations.Any(navigationEntry => navigationEntry.IsModified) || + entityEntry.Navigations.Where(x => x is ReferenceEntry).Cast().Any(x => x.TargetEntry != null && x.TargetEntry.State == EntityState.Modified)); } protected virtual bool ShouldSavePropertyHistory(PropertyEntry propertyEntry, bool defaultValue) diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuExtensions.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuExtensions.cs index 59814ff3be..c8ba277ccc 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuExtensions.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuExtensions.cs @@ -1,11 +1,13 @@ +using System; using JetBrains.Annotations; using System.Linq; -using Volo.Abp.UI.Navigation; namespace Volo.Abp.UI.Navigation; public static class ApplicationMenuExtensions { + public const string CustomDataComponentKey = "ApplicationMenu.CustomComponent"; + [NotNull] public static ApplicationMenuItem GetAdministration( [NotNull] this ApplicationMenu applicationMenu) @@ -112,4 +114,24 @@ public static class ApplicationMenuExtensions return menuWithGroups; } + + public static ApplicationMenuItem UseComponent(this ApplicationMenuItem applicationMenuItem) + { + return applicationMenuItem.UseComponent(typeof(TComponent)); + } + + public static ApplicationMenuItem UseComponent(this ApplicationMenuItem applicationMenuItem, Type componentType) + { + return applicationMenuItem.WithCustomData(CustomDataComponentKey, componentType); + } + + public static Type? GetComponentTypeOrDefault(this ApplicationMenuItem applicationMenuItem) + { + if (applicationMenuItem.CustomData.TryGetValue(CustomDataComponentKey, out var value)) + { + return value as Type; + } + + return default; + } } diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs index 7154fd805c..a5060dc595 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using NSubstitute; @@ -392,6 +391,7 @@ public class Auditing_Tests : AbpAuditingTestBase x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithValueObject).FullName && x.EntityChanges[2].ChangeType == EntityChangeType.Deleted && x.EntityChanges[2].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName)); + AuditingStore.ClearReceivedCalls(); #pragma warning restore 4014 using (var scope = _auditingManager.BeginScope()) @@ -421,7 +421,7 @@ public class Auditing_Tests : AbpAuditingTestBase x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithValueObject).FullName && x.EntityChanges[1].PropertyChanges.Count == 1 && x.EntityChanges[1].PropertyChanges[0].PropertyName == nameof(AppEntityWithValueObject.AppEntityWithValueObjectAddress))); - + AuditingStore.ClearReceivedCalls(); #pragma warning restore 4014 using (var scope = _auditingManager.BeginScope()) @@ -439,22 +439,16 @@ public class Auditing_Tests : AbpAuditingTestBase } #pragma warning disable 4014 - AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 2 && - x.EntityChanges[0].ChangeType == EntityChangeType.Updated && + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 && + x.EntityChanges[0].ChangeType == EntityChangeType.Deleted && x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName && - x.EntityChanges[0].PropertyChanges.Count == 1 && - x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithValueObjectAddress.Country) && - x.EntityChanges[0].PropertyChanges[0].OriginalValue == "\"England\"" && - x.EntityChanges[0].PropertyChanges[0].NewValue == "\"Germany\"" && - - x.EntityChanges[1].ChangeType == EntityChangeType.Updated && - x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithValueObject).FullName)); - + x.EntityChanges[0].PropertyChanges.Count == 2 && + x.EntityChanges[0].PropertyChanges.All(p => p.NewValue == null))); #pragma warning restore 4014 } [Fact] - public virtual async Task Should_Write_AuditLog_For_Navigations_Changes() + public virtual async Task Should_Write_AuditLog_For_Navigation_Changes() { var entityId = Guid.NewGuid(); var repository = ServiceProvider.GetRequiredService>(); @@ -484,6 +478,7 @@ public class Auditing_Tests : AbpAuditingTestBase x.EntityChanges[0].PropertyChanges[0].NewValue == "\"test full name\"" && x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigations.FullName) && x.EntityChanges[0].PropertyChanges[0].PropertyTypeFullName == typeof(string).FullName)); + AuditingStore.ClearReceivedCalls(); #pragma warning restore 4014 using (var scope = _auditingManager.BeginScope()) @@ -513,6 +508,7 @@ public class Auditing_Tests : AbpAuditingTestBase x.EntityChanges[1].PropertyChanges.Count == 1 && x.EntityChanges[1].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigations.OneToOne) && x.EntityChanges[1].PropertyChanges[0].PropertyTypeFullName == typeof(AppEntityWithNavigationChildOneToOne).FullName)); + AuditingStore.ClearReceivedCalls(); #pragma warning restore 4014 using (var scope = _auditingManager.BeginScope()) @@ -545,7 +541,7 @@ public class Auditing_Tests : AbpAuditingTestBase x.EntityChanges[1].PropertyChanges.Count == 1 && x.EntityChanges[1].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigations.OneToMany) && x.EntityChanges[1].PropertyChanges[0].PropertyTypeFullName == typeof(List).FullName)); - + AuditingStore.ClearReceivedCalls(); #pragma warning restore 4014 using (var scope = _auditingManager.BeginScope()) @@ -604,3 +600,234 @@ public class Auditing_DisableLogActionInfo_Tests : Auditing_Tests await AuditingStore.Received().SaveAsync(Arg.Is(x => x.Actions.IsNullOrEmpty())); } } + +public class Auditing_SaveEntityHistoryWhenNavigationChanges_Tests : AbpAuditingTestBase +{ + protected IAuditingStore AuditingStore; + private IAuditingManager _auditingManager; + private IUnitOfWorkManager _unitOfWorkManager; + + public Auditing_SaveEntityHistoryWhenNavigationChanges_Tests() + { + _auditingManager = GetRequiredService(); + _unitOfWorkManager = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + AuditingStore = Substitute.For(); + services.Replace(ServiceDescriptor.Singleton(AuditingStore)); + + services.Configure(options => + { + options.SaveEntityHistoryWhenNavigationChanges = false; + }); + } + + [Fact] + public virtual async Task Should_Write_AuditLog_For_ValueObject_Entity() + { + var entityId = Guid.NewGuid(); + var repository = ServiceProvider.GetRequiredService>(); + await repository.InsertAsync(new AppEntityWithValueObject(entityId, "test name", new AppEntityWithValueObjectAddress("USA"))); + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + entity.Name = "test name 2"; + entity.AppEntityWithValueObjectAddress = new AppEntityWithValueObjectAddress("England"); + + await repository.UpdateAsync(entity); + + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 3 && + x.EntityChanges[0].ChangeType == EntityChangeType.Created && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName && + x.EntityChanges[1].ChangeType == EntityChangeType.Updated && + x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithValueObject).FullName && + x.EntityChanges[2].ChangeType == EntityChangeType.Deleted && + x.EntityChanges[2].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName)); + AuditingStore.ClearReceivedCalls(); +#pragma warning restore 4014 + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.AppEntityWithValueObjectAddress.Country = "Germany"; + + await repository.UpdateAsync(entity); + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 && + x.EntityChanges[0].ChangeType == EntityChangeType.Updated && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName && + x.EntityChanges[0].PropertyChanges.Count == 1 && + x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithValueObjectAddress.Country) && + x.EntityChanges[0].PropertyChanges[0].OriginalValue == "\"England\"" && + x.EntityChanges[0].PropertyChanges[0].NewValue == "\"Germany\"")); + AuditingStore.ClearReceivedCalls(); +#pragma warning restore 4014 + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.AppEntityWithValueObjectAddress = null; + + await repository.UpdateAsync(entity); + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 && + x.EntityChanges[0].ChangeType == EntityChangeType.Deleted && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName && + x.EntityChanges[0].PropertyChanges.Count == 2 && + x.EntityChanges[0].PropertyChanges.All(p => p.NewValue == null))); +#pragma warning restore 4014 + } + + [Fact] + public virtual async Task Should_Not_Write_AuditLog_For_Navigation_Changes() + { + var entityId = Guid.NewGuid(); + var repository = ServiceProvider.GetRequiredService>(); + await repository.InsertAsync(new AppEntityWithNavigations(entityId, "test name")); + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.FullName = "test full name"; + + await repository.UpdateAsync(entity); + + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 && + x.EntityChanges[0].ChangeType == EntityChangeType.Updated && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithNavigations).FullName && + x.EntityChanges[0].PropertyChanges.Count == 1 && + x.EntityChanges[0].PropertyChanges[0].OriginalValue == "\"test name\"" && + x.EntityChanges[0].PropertyChanges[0].NewValue == "\"test full name\"" && + x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigations.FullName) && + x.EntityChanges[0].PropertyChanges[0].PropertyTypeFullName == typeof(string).FullName)); + AuditingStore.ClearReceivedCalls(); +#pragma warning restore 4014 + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.OneToOne = new AppEntityWithNavigationChildOneToOne + { + ChildName = "ChildName" + }; + + await repository.UpdateAsync(entity); + + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 && + x.EntityChanges[0].ChangeType == EntityChangeType.Created && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithNavigationChildOneToOne).FullName && + x.EntityChanges[0].PropertyChanges.Count == 1 && + x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigationChildOneToOne.ChildName) && + x.EntityChanges[0].PropertyChanges[0].PropertyTypeFullName == typeof(string).FullName)); + AuditingStore.ClearReceivedCalls(); +#pragma warning restore 4014 + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.OneToMany = new List() + { + new AppEntityWithNavigationChildOneToMany + { + AppEntityWithNavigationId = entity.Id, + ChildName = "ChildName1" + } + }; + + await repository.UpdateAsync(entity); + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 && + x.EntityChanges[0].ChangeType == EntityChangeType.Created && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithNavigationChildOneToMany).FullName && + x.EntityChanges[0].PropertyChanges.Count == 2 && + x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigationChildOneToMany.AppEntityWithNavigationId) && + x.EntityChanges[0].PropertyChanges[0].PropertyTypeFullName == typeof(Guid).FullName && + x.EntityChanges[0].PropertyChanges[1].PropertyName == nameof(AppEntityWithNavigationChildOneToMany.ChildName) && + x.EntityChanges[0].PropertyChanges[1].PropertyTypeFullName == typeof(string).FullName)); + AuditingStore.ClearReceivedCalls(); +#pragma warning restore 4014 + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.ManyToMany = new List() + { + new AppEntityWithNavigationChildManyToMany + { + ChildName = "ChildName1" + } + }; + + await repository.UpdateAsync(entity); + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 && + x.EntityChanges[0].ChangeType == EntityChangeType.Created && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithNavigationChildManyToMany).FullName && + x.EntityChanges[0].PropertyChanges.Count == 1 && + x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigationChildManyToMany.ChildName) && + x.EntityChanges[0].PropertyChanges[0].PropertyTypeFullName == typeof(string).FullName)); + +#pragma warning restore 4014 + } +} diff --git a/latest-versions.json b/latest-versions.json index fc41690d54..90644f1ac5 100644 --- a/latest-versions.json +++ b/latest-versions.json @@ -1,6 +1,6 @@ [ { - "version": "8.0.0", + "version": "8.0.1", "releaseDate": "", "type": "stable", "message": "" diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Navigation/BasicThemeNavigationExtensions.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Navigation/BasicThemeNavigationExtensions.cs deleted file mode 100644 index 020709f56c..0000000000 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Navigation/BasicThemeNavigationExtensions.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using JetBrains.Annotations; -using Volo.Abp.UI.Navigation; - -namespace Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation; - -public static class BasicThemeNavigationExtensions -{ - public const string CustomDataComponentKey = "BasicTheme.CustomComponent"; - - public static ApplicationMenuItem UseComponent(this ApplicationMenuItem applicationMenuItem, Type componentType) - { - return applicationMenuItem.WithCustomData(CustomDataComponentKey, componentType); - } - - [CanBeNull] - public static Type GetComponentTypeOrDefault(this ApplicationMenuItem applicationMenuItem) - { - if (applicationMenuItem.CustomData.TryGetValue(CustomDataComponentKey, out object componentType)) - { - return componentType as Type; - } - - return default; - } -} \ No newline at end of file diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor index 1f469a809a..070d514cb6 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor @@ -1,5 +1,4 @@ -@using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation; -@using Volo.Abp.UI.Navigation +@using Volo.Abp.UI.Navigation @{ var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"); var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass; diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor index 6d9ffb1fea..2a93e5459e 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor @@ -1,5 +1,4 @@ -@using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation; -@using Volo.Abp.UI.Navigation +@using Volo.Abp.UI.Navigation @{ var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"); var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass; diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/Default.cshtml b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/Default.cshtml index f146878b0f..19471fecfd 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/Default.cshtml +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/Default.cshtml @@ -6,9 +6,15 @@ var cssClass = string.IsNullOrEmpty(menuItem.CssClass) ? string.Empty : menuItem.CssClass; var disabled = menuItem.IsDisabled ? "disabled" : string.Empty; var url = string.IsNullOrEmpty(menuItem.Url) ? "#" : Url.IsLocalUrl(menuItem.Url) ? Url.Content(menuItem.Url.EnsureStartsWith('~')) : menuItem.Url; + var customComponentType = menuItem.GetComponentTypeOrDefault(); + if (menuItem.IsLeaf) { - if (menuItem.Url != null) + if (customComponentType != null) + { + @(await Component.InvokeAsync(customComponentType)) + } + else if (menuItem.Url != null) { } diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/_MenuItem.cshtml b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/_MenuItem.cshtml index 2dc72b8e58..1b5a4badbb 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/_MenuItem.cshtml +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/_MenuItem.cshtml @@ -5,10 +5,16 @@ var cssClass = string.IsNullOrEmpty(Model.CssClass) ? string.Empty : Model.CssClass; var disabled = Model.IsDisabled ? "disabled" : string.Empty; var url = string.IsNullOrEmpty(Model.Url) ? "#" : Url.IsLocalUrl(Model.Url) ? Url.Content(Model.Url.EnsureStartsWith('~')) : Model.Url; + var customComponentType = Model.GetComponentTypeOrDefault(); + } @if (Model.IsLeaf) { - if (Model.Url != null) + if (customComponentType != null) + { + @(await Component.InvokeAsync(customComponentType)) + } + else if (Model.Url != null) { @if (Model.Icon != null) @@ -25,20 +31,27 @@ else { } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20230504122708_Initial.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20230504122708_Initial.Designer.cs deleted file mode 100644 index e36098e684..0000000000 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20230504122708_Initial.Designer.cs +++ /dev/null @@ -1,2352 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; -using Volo.CmsKit.EntityFrameworkCore; - -#nullable disable - -namespace Volo.CmsKit.Migrations -{ - [DbContext(typeof(UnifiedDbContext))] - [Migration("20230504122708_Initial")] - partial class Initial - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "7.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)") - .HasColumnName("ApplicationName"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("BrowserInfo"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("ClientId"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("ClientIpAddress"); - - b.Property("ClientName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("ClientName"); - - b.Property("Comments") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Comments"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("CorrelationId"); - - b.Property("Exceptions") - .HasColumnType("nvarchar(max)"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("HttpMethod") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("HttpMethod"); - - b.Property("HttpStatusCode") - .HasColumnType("int") - .HasColumnName("HttpStatusCode"); - - b.Property("ImpersonatorTenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("ImpersonatorTenantId"); - - b.Property("ImpersonatorTenantName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("ImpersonatorTenantName"); - - b.Property("ImpersonatorUserId") - .HasColumnType("uniqueidentifier") - .HasColumnName("ImpersonatorUserId"); - - b.Property("ImpersonatorUserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("ImpersonatorUserName"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("TenantName"); - - b.Property("Url") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Url"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier") - .HasColumnName("UserId"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ExecutionTime"); - - b.HasIndex("TenantId", "UserId", "ExecutionTime"); - - b.ToTable("AbpAuditLogs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuditLogId") - .HasColumnType("uniqueidentifier") - .HasColumnName("AuditLogId"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime2") - .HasColumnName("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("MethodName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("MethodName"); - - b.Property("Parameters") - .HasMaxLength(2000) - .HasColumnType("nvarchar(2000)") - .HasColumnName("Parameters"); - - b.Property("ServiceName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("ServiceName"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); - - b.ToTable("AbpAuditLogActions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuditLogId") - .HasColumnType("uniqueidentifier") - .HasColumnName("AuditLogId"); - - b.Property("ChangeTime") - .HasColumnType("datetime2") - .HasColumnName("ChangeTime"); - - b.Property("ChangeType") - .HasColumnType("tinyint") - .HasColumnName("ChangeType"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("EntityId"); - - b.Property("EntityTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("EntityTypeFullName"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); - - b.ToTable("AbpEntityChanges", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("EntityChangeId") - .HasColumnType("uniqueidentifier"); - - b.Property("NewValue") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("NewValue"); - - b.Property("OriginalValue") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("OriginalValue"); - - b.Property("PropertyName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("PropertyName"); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("PropertyTypeFullName"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.ToTable("AbpEntityPropertyChanges", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("ContainerId") - .HasColumnType("uniqueidentifier"); - - b.Property("Content") - .HasMaxLength(2147483647) - .HasColumnType("varbinary(max)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("ContainerId"); - - b.HasIndex("TenantId", "ContainerId", "Name"); - - b.ToTable("AbpBlobs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Name"); - - b.ToTable("AbpBlobContainers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AllowedProviders") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("GroupName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("IsAvailableToHost") - .HasColumnType("bit"); - - b.Property("IsVisibleToClients") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ParentName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ValueType") - .HasMaxLength(2048) - .HasColumnType("nvarchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("GroupName"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpFeatures", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpFeatureGroups", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey") - .IsUnique() - .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); - - b.ToTable("AbpFeatureValues", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsStatic") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Regex") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("RegexDescription") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Required") - .HasColumnType("bit"); - - b.Property("ValueType") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("AbpClaimTypes", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("SourceTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("SourceUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("TargetTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("TargetUserId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") - .IsUnique() - .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); - - b.ToTable("AbpLinkUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDefault") - .HasColumnType("bit") - .HasColumnName("IsDefault"); - - b.Property("IsPublic") - .HasColumnType("bit") - .HasColumnName("IsPublic"); - - b.Property("IsStatic") - .HasColumnType("bit") - .HasColumnName("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("NormalizedName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName"); - - b.ToTable("AbpRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AbpRoleClaims", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Action") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("CreationTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Identity") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Action"); - - b.HasIndex("TenantId", "ApplicationName"); - - b.HasIndex("TenantId", "Identity"); - - b.HasIndex("TenantId", "UserId"); - - b.ToTable("AbpSecurityLogs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AccessFailedCount") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(0) - .HasColumnName("AccessFailedCount"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Email"); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("EmailConfirmed"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsActive") - .HasColumnType("bit") - .HasColumnName("IsActive"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsExternal") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsExternal"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("LastPasswordChangeTime") - .HasColumnType("datetimeoffset"); - - b.Property("LockoutEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("LockoutEnabled"); - - b.Property("LockoutEnd") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Name"); - - b.Property("NormalizedEmail") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("NormalizedEmail"); - - b.Property("NormalizedUserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("NormalizedUserName"); - - b.Property("PasswordHash") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("PasswordHash"); - - b.Property("PhoneNumber") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("PhoneNumber"); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("PhoneNumberConfirmed"); - - b.Property("SecurityStamp") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("SecurityStamp"); - - b.Property("ShouldChangePasswordOnNextLogin") - .HasColumnType("bit"); - - b.Property("Surname") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Surname"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TwoFactorEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("TwoFactorEnabled"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("Email"); - - b.HasIndex("NormalizedEmail"); - - b.HasIndex("NormalizedUserName"); - - b.HasIndex("UserName"); - - b.ToTable("AbpUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AbpUserClaims", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("SourceUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("StartTime") - .HasColumnType("datetime2"); - - b.Property("TargetUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("AbpUserDelegations", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderDisplayName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(196) - .HasColumnType("nvarchar(196)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "LoginProvider"); - - b.HasIndex("LoginProvider", "ProviderKey"); - - b.ToTable("AbpUserLogins", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("uniqueidentifier"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "UserId"); - - b.HasIndex("UserId", "OrganizationUnitId"); - - b.ToTable("AbpUserOrganizationUnits", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId", "UserId"); - - b.ToTable("AbpUserRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Value") - .HasColumnType("nvarchar(max)"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AbpUserTokens", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(95) - .HasColumnType("nvarchar(95)") - .HasColumnName("Code"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("DisplayName"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("ParentId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Code"); - - b.HasIndex("ParentId"); - - b.ToTable("AbpOrganizationUnits", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("uniqueidentifier"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "RoleId"); - - b.HasIndex("RoleId", "OrganizationUnitId"); - - b.ToTable("AbpOrganizationUnitRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("GroupName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("IsEnabled") - .HasColumnType("bit"); - - b.Property("MultiTenancySide") - .HasColumnType("tinyint"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ParentName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("StateCheckers") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("GroupName"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpPermissions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") - .IsUnique() - .HasFilter("[TenantId] IS NOT NULL"); - - b.ToTable("AbpPermissionGrants", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpPermissionGroups", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2048) - .HasColumnType("nvarchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey") - .IsUnique() - .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); - - b.ToTable("AbpSettings", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.HasKey("Id"); - - b.HasIndex("Name"); - - b.ToTable("AbpTenants", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.HasKey("TenantId", "Name"); - - b.ToTable("AbpTenantConnectionStrings", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Blogs.Blog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("CmsBlogs", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Blogs.BlogFeature", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("BlogId") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("FeatureName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsEnabled") - .HasColumnType("bit"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.HasKey("Id"); - - b.ToTable("CmsBlogFeatures", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Blogs.BlogPost", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuthorId") - .HasColumnType("uniqueidentifier"); - - b.Property("BlogId") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Content") - .HasMaxLength(2147483647) - .HasColumnType("nvarchar(max)"); - - b.Property("CoverImageMediaId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("ShortDescription") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Status") - .HasColumnType("int"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.HasKey("Id"); - - b.HasIndex("AuthorId"); - - b.HasIndex("Slug", "BlogId"); - - b.ToTable("CmsBlogPosts", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Comments.Comment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("RepliedCommentId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("Url") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "RepliedCommentId"); - - b.HasIndex("TenantId", "EntityType", "EntityId"); - - b.ToTable("CmsComments", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.GlobalResources.GlobalResource", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2147483647) - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("CmsGlobalResources", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.MediaDescriptors.MediaDescriptor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("MimeType") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("Size") - .HasMaxLength(2147483647) - .HasColumnType("bigint"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("CmsMediaDescriptors", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("CssClass") - .HasColumnType("nvarchar(max)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ElementId") - .HasColumnType("nvarchar(max)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Icon") - .HasColumnType("nvarchar(max)"); - - b.Property("IsActive") - .HasColumnType("bit"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Order") - .HasColumnType("int"); - - b.Property("PageId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentId") - .HasColumnType("uniqueidentifier"); - - b.Property("Target") - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Url") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.HasKey("Id"); - - b.ToTable("CmsMenuItems", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Pages.Page", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Content") - .HasMaxLength(2147483647) - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsHomePage") - .HasColumnType("bit"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Script") - .HasColumnType("nvarchar(max)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Style") - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Slug"); - - b.ToTable("CmsPages", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("StarCount") - .HasColumnType("smallint"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "EntityType", "EntityId", "CreatorId"); - - b.ToTable("CmsRatings", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Reactions.UserReaction", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ReactionName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("nvarchar(32)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "EntityType", "EntityId", "ReactionName"); - - b.HasIndex("TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName"); - - b.ToTable("CmsUserReactions", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => - { - b.Property("EntityId") - .HasColumnType("nvarchar(450)"); - - b.Property("TagId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("EntityId", "TagId"); - - b.HasIndex("TenantId", "EntityId", "TagId"); - - b.ToTable("CmsEntityTags", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Tags.Tag", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("nvarchar(32)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Name"); - - b.ToTable("CmsTags", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Email"); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("EmailConfirmed"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsActive") - .HasColumnType("bit") - .HasColumnName("IsActive"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Name"); - - b.Property("PhoneNumber") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("PhoneNumber"); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("PhoneNumberConfirmed"); - - b.Property("Surname") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Surname"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Email"); - - b.HasIndex("TenantId", "UserName"); - - b.ToTable("CmsUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => - { - b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null) - .WithMany() - .HasForeignKey("ContainerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany("Claims") - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Claims") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Logins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("OrganizationUnits") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Roles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Tokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("ParentId"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany("Roles") - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.HasOne("Volo.Abp.TenantManagement.Tenant", null) - .WithMany("ConnectionStrings") - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.CmsKit.Blogs.BlogPost", b => - { - b.HasOne("Volo.CmsKit.Users.CmsUser", "Author") - .WithMany() - .HasForeignKey("AuthorId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Author"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Navigation("Actions"); - - b.Navigation("EntityChanges"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Navigation("PropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Navigation("Claims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Navigation("Claims"); - - b.Navigation("Logins"); - - b.Navigation("OrganizationUnits"); - - b.Navigation("Roles"); - - b.Navigation("Tokens"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Navigation("Roles"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Navigation("ConnectionStrings"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20230504122708_Initial.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20230504122708_Initial.cs deleted file mode 100644 index 052650df63..0000000000 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20230504122708_Initial.cs +++ /dev/null @@ -1,1334 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Volo.CmsKit.Migrations -{ - /// - public partial class Initial : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AbpAuditLogs", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - ApplicationName = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), - UserId = table.Column(type: "uniqueidentifier", nullable: true), - UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - TenantName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - ImpersonatorUserId = table.Column(type: "uniqueidentifier", nullable: true), - ImpersonatorUserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - ImpersonatorTenantId = table.Column(type: "uniqueidentifier", nullable: true), - ImpersonatorTenantName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - ExecutionTime = table.Column(type: "datetime2", nullable: false), - ExecutionDuration = table.Column(type: "int", nullable: false), - ClientIpAddress = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - ClientName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - ClientId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - CorrelationId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - HttpMethod = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), - Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - Exceptions = table.Column(type: "nvarchar(max)", nullable: true), - Comments = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - HttpStatusCode = table.Column(type: "int", nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpBlobContainers", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpBlobContainers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpClaimTypes", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Required = table.Column(type: "bit", nullable: false), - IsStatic = table.Column(type: "bit", nullable: false), - Regex = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - RegexDescription = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - Description = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - ValueType = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpFeatureGroups", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpFeatureGroups", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpFeatures", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - GroupName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - ParentName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Description = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - IsVisibleToClients = table.Column(type: "bit", nullable: false), - IsAvailableToHost = table.Column(type: "bit", nullable: false), - AllowedProviders = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - ValueType = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpFeatures", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpFeatureValues", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - Value = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpFeatureValues", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpLinkUsers", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - SourceUserId = table.Column(type: "uniqueidentifier", nullable: false), - SourceTenantId = table.Column(type: "uniqueidentifier", nullable: true), - TargetUserId = table.Column(type: "uniqueidentifier", nullable: false), - TargetTenantId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpLinkUsers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpOrganizationUnits", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ParentId = table.Column(type: "uniqueidentifier", nullable: true), - Code = table.Column(type: "nvarchar(95)", maxLength: 95, nullable: false), - DisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpOrganizationUnits", x => x.Id); - table.ForeignKey( - name: "FK_AbpOrganizationUnits_AbpOrganizationUnits_ParentId", - column: x => x.ParentId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id"); - }); - - migrationBuilder.CreateTable( - name: "AbpPermissionGrants", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpPermissionGroups", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissionGroups", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpPermissions", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - GroupName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - ParentName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - IsEnabled = table.Column(type: "bit", nullable: false), - MultiTenancySide = table.Column(type: "tinyint", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - StateCheckers = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpRoles", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - NormalizedName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - IsDefault = table.Column(type: "bit", nullable: false), - IsStatic = table.Column(type: "bit", nullable: false), - IsPublic = table.Column(type: "bit", nullable: false), - EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoles", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpSecurityLogs", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ApplicationName = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), - Identity = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), - Action = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), - UserId = table.Column(type: "uniqueidentifier", nullable: true), - UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - TenantName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - ClientId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - CorrelationId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - ClientIpAddress = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpSecurityLogs", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpSettings", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - Value = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: false), - ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpSettings", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpTenants", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenants", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpUserDelegations", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - SourceUserId = table.Column(type: "uniqueidentifier", nullable: false), - TargetUserId = table.Column(type: "uniqueidentifier", nullable: false), - StartTime = table.Column(type: "datetime2", nullable: false), - EndTime = table.Column(type: "datetime2", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserDelegations", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpUsers", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - NormalizedUserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - Surname = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - Email = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - NormalizedEmail = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - EmailConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), - PasswordHash = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - SecurityStamp = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - IsExternal = table.Column(type: "bit", nullable: false, defaultValue: false), - PhoneNumber = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), - PhoneNumberConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), - IsActive = table.Column(type: "bit", nullable: false), - TwoFactorEnabled = table.Column(type: "bit", nullable: false, defaultValue: false), - LockoutEnd = table.Column(type: "datetimeoffset", nullable: true), - LockoutEnabled = table.Column(type: "bit", nullable: false, defaultValue: false), - AccessFailedCount = table.Column(type: "int", nullable: false, defaultValue: 0), - ShouldChangePasswordOnNextLogin = table.Column(type: "bit", nullable: false), - EntityVersion = table.Column(type: "int", nullable: false), - LastPasswordChangeTime = table.Column(type: "datetimeoffset", nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUsers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsBlogFeatures", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - BlogId = table.Column(type: "uniqueidentifier", nullable: false), - FeatureName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - IsEnabled = table.Column(type: "bit", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsBlogFeatures", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsBlogs", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Slug = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsBlogs", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsComments", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Text = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: false), - RepliedCommentId = table.Column(type: "uniqueidentifier", nullable: true), - CreatorId = table.Column(type: "uniqueidentifier", nullable: false), - CreationTime = table.Column(type: "datetime2", nullable: false), - Url = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsComments", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsEntityTags", - columns: table => new - { - TagId = table.Column(type: "uniqueidentifier", nullable: false), - EntityId = table.Column(type: "nvarchar(450)", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsEntityTags", x => new { x.EntityId, x.TagId }); - }); - - migrationBuilder.CreateTable( - name: "CmsGlobalResources", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - Value = table.Column(type: "nvarchar(max)", maxLength: 2147483647, nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsGlobalResources", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsMediaDescriptors", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Name = table.Column(type: "nvarchar(255)", maxLength: 255, nullable: false), - MimeType = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - Size = table.Column(type: "bigint", maxLength: 2147483647, nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsMediaDescriptors", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsMenuItems", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - ParentId = table.Column(type: "uniqueidentifier", nullable: true), - DisplayName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - IsActive = table.Column(type: "bit", nullable: false), - Url = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: false), - Icon = table.Column(type: "nvarchar(max)", nullable: true), - Order = table.Column(type: "int", nullable: false), - Target = table.Column(type: "nvarchar(max)", nullable: true), - ElementId = table.Column(type: "nvarchar(max)", nullable: true), - CssClass = table.Column(type: "nvarchar(max)", nullable: true), - PageId = table.Column(type: "uniqueidentifier", nullable: true), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsMenuItems", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsPages", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Title = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Slug = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Content = table.Column(type: "nvarchar(max)", maxLength: 2147483647, nullable: true), - Script = table.Column(type: "nvarchar(max)", nullable: true), - Style = table.Column(type: "nvarchar(max)", nullable: true), - IsHomePage = table.Column(type: "bit", nullable: false), - EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsPages", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsRatings", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - StarCount = table.Column(type: "smallint", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: false), - CreationTime = table.Column(type: "datetime2", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsRatings", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsTags", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Name = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsTags", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsUserReactions", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - ReactionName = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: false), - CreationTime = table.Column(type: "datetime2", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsUserReactions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsUsers", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Email = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - Surname = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), - IsActive = table.Column(type: "bit", nullable: false), - EmailConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), - PhoneNumber = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), - PhoneNumberConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsUsers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpAuditLogActions", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - AuditLogId = table.Column(type: "uniqueidentifier", nullable: false), - ServiceName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - MethodName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), - Parameters = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), - ExecutionTime = table.Column(type: "datetime2", nullable: false), - ExecutionDuration = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); - table.ForeignKey( - name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpEntityChanges", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - AuditLogId = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ChangeTime = table.Column(type: "datetime2", nullable: false), - ChangeType = table.Column(type: "tinyint", nullable: false), - EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpBlobs", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - ContainerId = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - Content = table.Column(type: "varbinary(max)", maxLength: 2147483647, nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpBlobs", x => x.Id); - table.ForeignKey( - name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", - column: x => x.ContainerId, - principalTable: "AbpBlobContainers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpOrganizationUnitRoles", - columns: table => new - { - RoleId = table.Column(type: "uniqueidentifier", nullable: false), - OrganizationUnitId = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpOrganizationUnitRoles", x => new { x.OrganizationUnitId, x.RoleId }); - table.ForeignKey( - name: "FK_AbpOrganizationUnitRoles_AbpOrganizationUnits_OrganizationUnitId", - column: x => x.OrganizationUnitId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpOrganizationUnitRoles_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpRoleClaims", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - RoleId = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ClaimType = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - ClaimValue = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpRoleClaims_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpTenantConnectionStrings", - columns: table => new - { - TenantId = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Value = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); - table.ForeignKey( - name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", - column: x => x.TenantId, - principalTable: "AbpTenants", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserClaims", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - UserId = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ClaimType = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - ClaimValue = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpUserClaims_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserLogins", - columns: table => new - { - UserId = table.Column(type: "uniqueidentifier", nullable: false), - LoginProvider = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ProviderKey = table.Column(type: "nvarchar(196)", maxLength: 196, nullable: false), - ProviderDisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); - table.ForeignKey( - name: "FK_AbpUserLogins_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserOrganizationUnits", - columns: table => new - { - UserId = table.Column(type: "uniqueidentifier", nullable: false), - OrganizationUnitId = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserOrganizationUnits", x => new { x.OrganizationUnitId, x.UserId }); - table.ForeignKey( - name: "FK_AbpUserOrganizationUnits_AbpOrganizationUnits_OrganizationUnitId", - column: x => x.OrganizationUnitId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpUserOrganizationUnits_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserRoles", - columns: table => new - { - UserId = table.Column(type: "uniqueidentifier", nullable: false), - RoleId = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserTokens", - columns: table => new - { - UserId = table.Column(type: "uniqueidentifier", nullable: false), - LoginProvider = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - Value = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); - table.ForeignKey( - name: "FK_AbpUserTokens_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "CmsBlogPosts", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - BlogId = table.Column(type: "uniqueidentifier", nullable: false), - Title = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Slug = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - ShortDescription = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - Content = table.Column(type: "nvarchar(max)", maxLength: 2147483647, nullable: true), - CoverImageMediaId = table.Column(type: "uniqueidentifier", nullable: true), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - AuthorId = table.Column(type: "uniqueidentifier", nullable: false), - Status = table.Column(type: "int", nullable: false), - EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsBlogPosts", x => x.Id); - table.ForeignKey( - name: "FK_CmsBlogPosts_CmsUsers_AuthorId", - column: x => x.AuthorId, - principalTable: "CmsUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpEntityPropertyChanges", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityChangeId = table.Column(type: "uniqueidentifier", nullable: false), - NewValue = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - OriginalValue = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - PropertyName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - PropertyTypeFullName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", - column: x => x.EntityChangeId, - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_AuditLogId", - table: "AbpAuditLogActions", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", - table: "AbpAuditLogActions", - columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "UserId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpBlobContainers_TenantId_Name", - table: "AbpBlobContainers", - columns: new[] { "TenantId", "Name" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpBlobs_ContainerId", - table: "AbpBlobs", - column: "ContainerId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpBlobs_TenantId_ContainerId_Name", - table: "AbpBlobs", - columns: new[] { "TenantId", "ContainerId", "Name" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_AuditLogId", - table: "AbpEntityChanges", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", - table: "AbpEntityChanges", - columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpFeatureGroups_Name", - table: "AbpFeatureGroups", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpFeatures_GroupName", - table: "AbpFeatures", - column: "GroupName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpFeatures_Name", - table: "AbpFeatures", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpFeatureValues_Name_ProviderName_ProviderKey", - table: "AbpFeatureValues", - columns: new[] { "Name", "ProviderName", "ProviderKey" }, - unique: true, - filter: "[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); - - migrationBuilder.CreateIndex( - name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_TargetTenantId", - table: "AbpLinkUsers", - columns: new[] { "SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId" }, - unique: true, - filter: "[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnitRoles_RoleId_OrganizationUnitId", - table: "AbpOrganizationUnitRoles", - columns: new[] { "RoleId", "OrganizationUnitId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnits_Code", - table: "AbpOrganizationUnits", - column: "Code"); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnits_ParentId", - table: "AbpOrganizationUnits", - column: "ParentId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissionGrants_TenantId_Name_ProviderName_ProviderKey", - table: "AbpPermissionGrants", - columns: new[] { "TenantId", "Name", "ProviderName", "ProviderKey" }, - unique: true, - filter: "[TenantId] IS NOT NULL"); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissionGroups_Name", - table: "AbpPermissionGroups", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissions_GroupName", - table: "AbpPermissions", - column: "GroupName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissions_Name", - table: "AbpPermissions", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoleClaims_RoleId", - table: "AbpRoleClaims", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoles_NormalizedName", - table: "AbpRoles", - column: "NormalizedName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpSecurityLogs_TenantId_Action", - table: "AbpSecurityLogs", - columns: new[] { "TenantId", "Action" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpSecurityLogs_TenantId_ApplicationName", - table: "AbpSecurityLogs", - columns: new[] { "TenantId", "ApplicationName" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpSecurityLogs_TenantId_Identity", - table: "AbpSecurityLogs", - columns: new[] { "TenantId", "Identity" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpSecurityLogs_TenantId_UserId", - table: "AbpSecurityLogs", - columns: new[] { "TenantId", "UserId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpSettings_Name_ProviderName_ProviderKey", - table: "AbpSettings", - columns: new[] { "Name", "ProviderName", "ProviderKey" }, - unique: true, - filter: "[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); - - migrationBuilder.CreateIndex( - name: "IX_AbpTenants_Name", - table: "AbpTenants", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserClaims_UserId", - table: "AbpUserClaims", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserLogins_LoginProvider_ProviderKey", - table: "AbpUserLogins", - columns: new[] { "LoginProvider", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserOrganizationUnits_UserId_OrganizationUnitId", - table: "AbpUserOrganizationUnits", - columns: new[] { "UserId", "OrganizationUnitId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserRoles_RoleId_UserId", - table: "AbpUserRoles", - columns: new[] { "RoleId", "UserId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_Email", - table: "AbpUsers", - column: "Email"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedEmail", - table: "AbpUsers", - column: "NormalizedEmail"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedUserName", - table: "AbpUsers", - column: "NormalizedUserName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_UserName", - table: "AbpUsers", - column: "UserName"); - - migrationBuilder.CreateIndex( - name: "IX_CmsBlogPosts_AuthorId", - table: "CmsBlogPosts", - column: "AuthorId"); - - migrationBuilder.CreateIndex( - name: "IX_CmsBlogPosts_Slug_BlogId", - table: "CmsBlogPosts", - columns: new[] { "Slug", "BlogId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsComments_TenantId_EntityType_EntityId", - table: "CmsComments", - columns: new[] { "TenantId", "EntityType", "EntityId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsComments_TenantId_RepliedCommentId", - table: "CmsComments", - columns: new[] { "TenantId", "RepliedCommentId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsEntityTags_TenantId_EntityId_TagId", - table: "CmsEntityTags", - columns: new[] { "TenantId", "EntityId", "TagId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsPages_TenantId_Slug", - table: "CmsPages", - columns: new[] { "TenantId", "Slug" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsRatings_TenantId_EntityType_EntityId_CreatorId", - table: "CmsRatings", - columns: new[] { "TenantId", "EntityType", "EntityId", "CreatorId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsTags_TenantId_Name", - table: "CmsTags", - columns: new[] { "TenantId", "Name" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsUserReactions_TenantId_CreatorId_EntityType_EntityId_ReactionName", - table: "CmsUserReactions", - columns: new[] { "TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsUserReactions_TenantId_EntityType_EntityId_ReactionName", - table: "CmsUserReactions", - columns: new[] { "TenantId", "EntityType", "EntityId", "ReactionName" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsUsers_TenantId_Email", - table: "CmsUsers", - columns: new[] { "TenantId", "Email" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsUsers_TenantId_UserName", - table: "CmsUsers", - columns: new[] { "TenantId", "UserName" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AbpAuditLogActions"); - - migrationBuilder.DropTable( - name: "AbpBlobs"); - - migrationBuilder.DropTable( - name: "AbpClaimTypes"); - - migrationBuilder.DropTable( - name: "AbpEntityPropertyChanges"); - - migrationBuilder.DropTable( - name: "AbpFeatureGroups"); - - migrationBuilder.DropTable( - name: "AbpFeatures"); - - migrationBuilder.DropTable( - name: "AbpFeatureValues"); - - migrationBuilder.DropTable( - name: "AbpLinkUsers"); - - migrationBuilder.DropTable( - name: "AbpOrganizationUnitRoles"); - - migrationBuilder.DropTable( - name: "AbpPermissionGrants"); - - migrationBuilder.DropTable( - name: "AbpPermissionGroups"); - - migrationBuilder.DropTable( - name: "AbpPermissions"); - - migrationBuilder.DropTable( - name: "AbpRoleClaims"); - - migrationBuilder.DropTable( - name: "AbpSecurityLogs"); - - migrationBuilder.DropTable( - name: "AbpSettings"); - - migrationBuilder.DropTable( - name: "AbpTenantConnectionStrings"); - - migrationBuilder.DropTable( - name: "AbpUserClaims"); - - migrationBuilder.DropTable( - name: "AbpUserDelegations"); - - migrationBuilder.DropTable( - name: "AbpUserLogins"); - - migrationBuilder.DropTable( - name: "AbpUserOrganizationUnits"); - - migrationBuilder.DropTable( - name: "AbpUserRoles"); - - migrationBuilder.DropTable( - name: "AbpUserTokens"); - - migrationBuilder.DropTable( - name: "CmsBlogFeatures"); - - migrationBuilder.DropTable( - name: "CmsBlogPosts"); - - migrationBuilder.DropTable( - name: "CmsBlogs"); - - migrationBuilder.DropTable( - name: "CmsComments"); - - migrationBuilder.DropTable( - name: "CmsEntityTags"); - - migrationBuilder.DropTable( - name: "CmsGlobalResources"); - - migrationBuilder.DropTable( - name: "CmsMediaDescriptors"); - - migrationBuilder.DropTable( - name: "CmsMenuItems"); - - migrationBuilder.DropTable( - name: "CmsPages"); - - migrationBuilder.DropTable( - name: "CmsRatings"); - - migrationBuilder.DropTable( - name: "CmsTags"); - - migrationBuilder.DropTable( - name: "CmsUserReactions"); - - migrationBuilder.DropTable( - name: "AbpBlobContainers"); - - migrationBuilder.DropTable( - name: "AbpEntityChanges"); - - migrationBuilder.DropTable( - name: "AbpTenants"); - - migrationBuilder.DropTable( - name: "AbpOrganizationUnits"); - - migrationBuilder.DropTable( - name: "AbpRoles"); - - migrationBuilder.DropTable( - name: "AbpUsers"); - - migrationBuilder.DropTable( - name: "CmsUsers"); - - migrationBuilder.DropTable( - name: "AbpAuditLogs"); - } - } -} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs deleted file mode 100644 index b94883ec0b..0000000000 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ /dev/null @@ -1,2349 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; -using Volo.CmsKit.EntityFrameworkCore; - -#nullable disable - -namespace Volo.CmsKit.Migrations -{ - [DbContext(typeof(UnifiedDbContext))] - partial class UnifiedDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "7.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)") - .HasColumnName("ApplicationName"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("BrowserInfo"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("ClientId"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("ClientIpAddress"); - - b.Property("ClientName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("ClientName"); - - b.Property("Comments") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Comments"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("CorrelationId"); - - b.Property("Exceptions") - .HasColumnType("nvarchar(max)"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("HttpMethod") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("HttpMethod"); - - b.Property("HttpStatusCode") - .HasColumnType("int") - .HasColumnName("HttpStatusCode"); - - b.Property("ImpersonatorTenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("ImpersonatorTenantId"); - - b.Property("ImpersonatorTenantName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("ImpersonatorTenantName"); - - b.Property("ImpersonatorUserId") - .HasColumnType("uniqueidentifier") - .HasColumnName("ImpersonatorUserId"); - - b.Property("ImpersonatorUserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("ImpersonatorUserName"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("TenantName"); - - b.Property("Url") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Url"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier") - .HasColumnName("UserId"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ExecutionTime"); - - b.HasIndex("TenantId", "UserId", "ExecutionTime"); - - b.ToTable("AbpAuditLogs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuditLogId") - .HasColumnType("uniqueidentifier") - .HasColumnName("AuditLogId"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime2") - .HasColumnName("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("MethodName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("MethodName"); - - b.Property("Parameters") - .HasMaxLength(2000) - .HasColumnType("nvarchar(2000)") - .HasColumnName("Parameters"); - - b.Property("ServiceName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("ServiceName"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); - - b.ToTable("AbpAuditLogActions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuditLogId") - .HasColumnType("uniqueidentifier") - .HasColumnName("AuditLogId"); - - b.Property("ChangeTime") - .HasColumnType("datetime2") - .HasColumnName("ChangeTime"); - - b.Property("ChangeType") - .HasColumnType("tinyint") - .HasColumnName("ChangeType"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("EntityId"); - - b.Property("EntityTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("EntityTypeFullName"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); - - b.ToTable("AbpEntityChanges", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("EntityChangeId") - .HasColumnType("uniqueidentifier"); - - b.Property("NewValue") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("NewValue"); - - b.Property("OriginalValue") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("OriginalValue"); - - b.Property("PropertyName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("PropertyName"); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("PropertyTypeFullName"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.ToTable("AbpEntityPropertyChanges", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("ContainerId") - .HasColumnType("uniqueidentifier"); - - b.Property("Content") - .HasMaxLength(2147483647) - .HasColumnType("varbinary(max)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("ContainerId"); - - b.HasIndex("TenantId", "ContainerId", "Name"); - - b.ToTable("AbpBlobs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Name"); - - b.ToTable("AbpBlobContainers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AllowedProviders") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("GroupName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("IsAvailableToHost") - .HasColumnType("bit"); - - b.Property("IsVisibleToClients") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ParentName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ValueType") - .HasMaxLength(2048) - .HasColumnType("nvarchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("GroupName"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpFeatures", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpFeatureGroups", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey") - .IsUnique() - .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); - - b.ToTable("AbpFeatureValues", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsStatic") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Regex") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("RegexDescription") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Required") - .HasColumnType("bit"); - - b.Property("ValueType") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("AbpClaimTypes", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("SourceTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("SourceUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("TargetTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("TargetUserId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") - .IsUnique() - .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); - - b.ToTable("AbpLinkUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDefault") - .HasColumnType("bit") - .HasColumnName("IsDefault"); - - b.Property("IsPublic") - .HasColumnType("bit") - .HasColumnName("IsPublic"); - - b.Property("IsStatic") - .HasColumnType("bit") - .HasColumnName("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("NormalizedName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName"); - - b.ToTable("AbpRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AbpRoleClaims", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Action") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("CreationTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Identity") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Action"); - - b.HasIndex("TenantId", "ApplicationName"); - - b.HasIndex("TenantId", "Identity"); - - b.HasIndex("TenantId", "UserId"); - - b.ToTable("AbpSecurityLogs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AccessFailedCount") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(0) - .HasColumnName("AccessFailedCount"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Email"); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("EmailConfirmed"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsActive") - .HasColumnType("bit") - .HasColumnName("IsActive"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsExternal") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsExternal"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("LastPasswordChangeTime") - .HasColumnType("datetimeoffset"); - - b.Property("LockoutEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("LockoutEnabled"); - - b.Property("LockoutEnd") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Name"); - - b.Property("NormalizedEmail") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("NormalizedEmail"); - - b.Property("NormalizedUserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("NormalizedUserName"); - - b.Property("PasswordHash") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("PasswordHash"); - - b.Property("PhoneNumber") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("PhoneNumber"); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("PhoneNumberConfirmed"); - - b.Property("SecurityStamp") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("SecurityStamp"); - - b.Property("ShouldChangePasswordOnNextLogin") - .HasColumnType("bit"); - - b.Property("Surname") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Surname"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TwoFactorEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("TwoFactorEnabled"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("Email"); - - b.HasIndex("NormalizedEmail"); - - b.HasIndex("NormalizedUserName"); - - b.HasIndex("UserName"); - - b.ToTable("AbpUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AbpUserClaims", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("EndTime") - .HasColumnType("datetime2"); - - b.Property("SourceUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("StartTime") - .HasColumnType("datetime2"); - - b.Property("TargetUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("AbpUserDelegations", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderDisplayName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(196) - .HasColumnType("nvarchar(196)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "LoginProvider"); - - b.HasIndex("LoginProvider", "ProviderKey"); - - b.ToTable("AbpUserLogins", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("uniqueidentifier"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "UserId"); - - b.HasIndex("UserId", "OrganizationUnitId"); - - b.ToTable("AbpUserOrganizationUnits", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId", "UserId"); - - b.ToTable("AbpUserRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Value") - .HasColumnType("nvarchar(max)"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AbpUserTokens", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(95) - .HasColumnType("nvarchar(95)") - .HasColumnName("Code"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("DisplayName"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("ParentId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Code"); - - b.HasIndex("ParentId"); - - b.ToTable("AbpOrganizationUnits", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("uniqueidentifier"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "RoleId"); - - b.HasIndex("RoleId", "OrganizationUnitId"); - - b.ToTable("AbpOrganizationUnitRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("GroupName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("IsEnabled") - .HasColumnType("bit"); - - b.Property("MultiTenancySide") - .HasColumnType("tinyint"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ParentName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("StateCheckers") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("GroupName"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpPermissions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") - .IsUnique() - .HasFilter("[TenantId] IS NOT NULL"); - - b.ToTable("AbpPermissionGrants", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpPermissionGroups", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2048) - .HasColumnType("nvarchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey") - .IsUnique() - .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); - - b.ToTable("AbpSettings", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.HasKey("Id"); - - b.HasIndex("Name"); - - b.ToTable("AbpTenants", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.HasKey("TenantId", "Name"); - - b.ToTable("AbpTenantConnectionStrings", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Blogs.Blog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("CmsBlogs", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Blogs.BlogFeature", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("BlogId") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("FeatureName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsEnabled") - .HasColumnType("bit"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.HasKey("Id"); - - b.ToTable("CmsBlogFeatures", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Blogs.BlogPost", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuthorId") - .HasColumnType("uniqueidentifier"); - - b.Property("BlogId") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Content") - .HasMaxLength(2147483647) - .HasColumnType("nvarchar(max)"); - - b.Property("CoverImageMediaId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("ShortDescription") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Status") - .HasColumnType("int"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.HasKey("Id"); - - b.HasIndex("AuthorId"); - - b.HasIndex("Slug", "BlogId"); - - b.ToTable("CmsBlogPosts", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Comments.Comment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("RepliedCommentId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("Url") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "RepliedCommentId"); - - b.HasIndex("TenantId", "EntityType", "EntityId"); - - b.ToTable("CmsComments", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.GlobalResources.GlobalResource", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2147483647) - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("CmsGlobalResources", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.MediaDescriptors.MediaDescriptor", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("MimeType") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("nvarchar(255)"); - - b.Property("Size") - .HasMaxLength(2147483647) - .HasColumnType("bigint"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("CmsMediaDescriptors", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("CssClass") - .HasColumnType("nvarchar(max)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ElementId") - .HasColumnType("nvarchar(max)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Icon") - .HasColumnType("nvarchar(max)"); - - b.Property("IsActive") - .HasColumnType("bit"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Order") - .HasColumnType("int"); - - b.Property("PageId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentId") - .HasColumnType("uniqueidentifier"); - - b.Property("Target") - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Url") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.HasKey("Id"); - - b.ToTable("CmsMenuItems", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Pages.Page", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Content") - .HasMaxLength(2147483647) - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsHomePage") - .HasColumnType("bit"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Script") - .HasColumnType("nvarchar(max)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Style") - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Slug"); - - b.ToTable("CmsPages", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("StarCount") - .HasColumnType("smallint"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "EntityType", "EntityId", "CreatorId"); - - b.ToTable("CmsRatings", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Reactions.UserReaction", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ReactionName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("nvarchar(32)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "EntityType", "EntityId", "ReactionName"); - - b.HasIndex("TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName"); - - b.ToTable("CmsUserReactions", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => - { - b.Property("EntityId") - .HasColumnType("nvarchar(450)"); - - b.Property("TagId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("EntityId", "TagId"); - - b.HasIndex("TenantId", "EntityId", "TagId"); - - b.ToTable("CmsEntityTags", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Tags.Tag", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("nvarchar(32)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Name"); - - b.ToTable("CmsTags", (string)null); - }); - - modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Email"); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("EmailConfirmed"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsActive") - .HasColumnType("bit") - .HasColumnName("IsActive"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Name"); - - b.Property("PhoneNumber") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("PhoneNumber"); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("PhoneNumberConfirmed"); - - b.Property("Surname") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Surname"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Email"); - - b.HasIndex("TenantId", "UserName"); - - b.ToTable("CmsUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => - { - b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null) - .WithMany() - .HasForeignKey("ContainerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany("Claims") - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Claims") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Logins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("OrganizationUnits") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Roles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Tokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("ParentId"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany("Roles") - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.HasOne("Volo.Abp.TenantManagement.Tenant", null) - .WithMany("ConnectionStrings") - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.CmsKit.Blogs.BlogPost", b => - { - b.HasOne("Volo.CmsKit.Users.CmsUser", "Author") - .WithMany() - .HasForeignKey("AuthorId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Author"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Navigation("Actions"); - - b.Navigation("EntityChanges"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Navigation("PropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Navigation("Claims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Navigation("Claims"); - - b.Navigation("Logins"); - - b.Navigation("OrganizationUnits"); - - b.Navigation("Roles"); - - b.Navigation("Tokens"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Navigation("Roles"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Navigation("ConnectionStrings"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js index 9a16f925f1..a2a2e15682 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js @@ -74,7 +74,10 @@ }); function fullSearch(filterText){ - window.open($('#fullsearch').data('fullsearch-url') + "?keyword=" + encodeURIComponent(filterText)); + var url = $('#fullsearch').data('fullsearch-url'); + if(url){ + window.open(url + "?keyword=" + encodeURIComponent(filterText)); + } } $('#fullsearch').keyup(function (e) { diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.Designer.cs b/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20240108043816_Initial.Designer.cs similarity index 99% rename from modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.Designer.cs rename to modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20240108043816_Initial.Designer.cs index a7a1b7a5b4..bb9793af70 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.Designer.cs +++ b/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20240108043816_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace OpenIddict.Demo.Server.Migrations { [DbContext(typeof(ServerDbContext))] - [Migration("20231207053813_Initial")] + [Migration("20240108043816_Initial")] partial class Initial { /// @@ -1326,8 +1326,8 @@ namespace OpenIddict.Demo.Server.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1357,8 +1357,8 @@ namespace OpenIddict.Demo.Server.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.cs b/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20240108043816_Initial.cs similarity index 99% rename from modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.cs rename to modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20240108043816_Initial.cs index 43e69e2d57..9e98844b1c 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.cs +++ b/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20240108043816_Initial.cs @@ -229,9 +229,9 @@ namespace OpenIddict.Demo.Server.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/ServerDbContextModelSnapshot.cs b/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/ServerDbContextModelSnapshot.cs index 2ff52d58d5..0345f4da8d 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/ServerDbContextModelSnapshot.cs +++ b/modules/openiddict/app/OpenIddict.Demo.Server/Migrations/ServerDbContextModelSnapshot.cs @@ -1323,8 +1323,8 @@ namespace OpenIddict.Demo.Server.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1354,8 +1354,8 @@ namespace OpenIddict.Demo.Server.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs index 2e4fe86906..ef056918c8 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs @@ -57,6 +57,11 @@ public class PermissionAppService : ApplicationService, IPermissionAppService foreach (var permission in permissions) { + if(permission.Parent != null && !neededCheckPermissions.Contains(permission.Parent)) + { + continue; + } + if (await SimpleStateCheckerManager.IsEnabledAsync(permission)) { neededCheckPermissions.Add(permission); diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index 8a5c82e734..4a55b75df8 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -17,7 +17,7 @@ public partial class PermissionManagementModal [Inject] protected ICurrentApplicationConfigurationCacheResetService CurrentApplicationConfigurationCacheResetService { get; set; } [Inject] protected IOptions LocalizationOptions { get; set; } - + protected Modal _modal; protected string _providerName; @@ -71,7 +71,7 @@ public partial class PermissionManagementModal } } } - + protected Dictionary _permissionDepths = new Dictionary(); public PermissionManagementModal() @@ -137,7 +137,7 @@ public partial class PermissionManagementModal { try { - + var updateDto = new UpdatePermissionsDto { Permissions = _groups @@ -145,7 +145,7 @@ public partial class PermissionManagementModal .Select(p => new UpdatePermissionDto { IsGranted = p.IsGranted, Name = p.Name }) .ToArray() }; - + if (!updateDto.Permissions.Any(x => x.IsGranted)) { if (!await Message.Confirm(L["SaveWithoutAnyPermissionsWarningMessage"].Value)) @@ -182,7 +182,7 @@ public partial class PermissionManagementModal } } } - + protected virtual int GetPermissionDepthOrDefault(string name) { return _permissionDepths.GetValueOrDefault(name, 0); @@ -207,7 +207,7 @@ public partial class PermissionManagementModal { SetParentPermissionGrant(permissionGroup, permission); } - else if (value == false) + else { var childPermissions = GetChildPermissions(permissionGroup, permission); @@ -229,7 +229,7 @@ public partial class PermissionManagementModal SetPermissionGrant(parentPermission, true); SetParentPermissionGrant(permissionGroup, parentPermission); - + } private void SetPermissionGrant(PermissionGrantInfoDto permission, bool value) @@ -260,7 +260,25 @@ public partial class PermissionManagementModal protected List GetChildPermissions(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) { - return permissionGroup.Permissions.Where(x => x.Name.StartsWith(permission.Name)).ToList(); + var childPermissions = new List(); + GetChildPermissions(childPermissions, permissionGroup.Permissions, permission); + return childPermissions; + } + + protected void GetChildPermissions(List allChildPermissions, List permissions, PermissionGrantInfoDto permission) + { + var childPermissions = permissions.Where(x => x.ParentName == permission.Name).ToList(); + if (childPermissions.Count == 0) + { + return; + } + + allChildPermissions.AddRange(childPermissions); + + foreach (var childPermission in childPermissions) + { + GetChildPermissions(allChildPermissions, permissions, childPermission); + } } protected bool IsDisabledPermission(PermissionGrantInfoDto permissionGrantInfo) diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo/Abp/PermissionManagement/PermissionAppService_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo/Abp/PermissionManagement/PermissionAppService_Tests.cs index c10c17d900..52a68f60d3 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo/Abp/PermissionManagement/PermissionAppService_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo/Abp/PermissionManagement/PermissionAppService_Tests.cs @@ -42,12 +42,24 @@ public class PermissionAppService_Tests : AbpPermissionManagementApplicationTest permissionListResultDto.Groups.First().Permissions.ShouldContain(x => x.Name == "MyPermission4"); permissionListResultDto.Groups.First().Permissions.ShouldNotContain(x => x.Name == "MyPermission5"); + permissionListResultDto.Groups.First().Permissions.ShouldNotContain(x => x.Name == "MyPermission5.ChildPermission1"); using (_currentPrincipalAccessor.Change(new Claim(AbpClaimTypes.Role, "super-admin"))) { - (await _permissionAppService.GetAsync(UserPermissionValueProvider.ProviderName, PermissionTestDataBuilder.User1Id.ToString())).Groups.First().Permissions - .ShouldContain(x => x.Name == "MyPermission5"); + var result = await _permissionAppService.GetAsync(UserPermissionValueProvider.ProviderName, PermissionTestDataBuilder.User1Id.ToString()); + result.Groups.First().Permissions.ShouldContain(x => x.Name == "MyPermission5"); + result.Groups.First().Permissions.ShouldContain(x => x.Name == "MyPermission5.ChildPermission1"); } + + permissionListResultDto.Groups.First().Permissions.ShouldContain(x => x.Name == "MyPermission6"); + permissionListResultDto.Groups.First().Permissions.ShouldNotContain(x => x.Name == "MyPermission6.ChildDisabledPermission1"); + permissionListResultDto.Groups.First().Permissions.ShouldContain(x => x.Name == "MyPermission6.ChildPermission2"); + + permissionListResultDto.Groups.First().Permissions.ShouldNotContain(x => x.Name == "MyDisabledPermission1"); + permissionListResultDto.Groups.First().Permissions.ShouldNotContain(x => x.Name == "MyDisabledPermission2"); + permissionListResultDto.Groups.First().Permissions.ShouldNotContain(x => x.Name == "MyDisabledPermission2.ChildPermission1"); + permissionListResultDto.Groups.First().Permissions.ShouldNotContain(x => x.Name == "MyDisabledPermission2.ChildPermission2"); + permissionListResultDto.Groups.First().Permissions.ShouldNotContain(x => x.Name == "MyDisabledPermission2.ChildPermission2.ChildPermission1"); } [Fact] diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/TestPermissionDefinitionProvider.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/TestPermissionDefinitionProvider.cs index bc56df742e..55d034ad61 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/TestPermissionDefinitionProvider.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/TestPermissionDefinitionProvider.cs @@ -19,6 +19,17 @@ public class TestPermissionDefinitionProvider : PermissionDefinitionProvider testGroup.AddPermission("MyPermission4", multiTenancySide: MultiTenancySides.Host).WithProviders(UserPermissionValueProvider.ProviderName); - testGroup.AddPermission("MyPermission5").StateCheckers.Add(new TestRequireRolePermissionStateProvider("super-admin")); + var myPermission5 = testGroup.AddPermission("MyPermission5"); + myPermission5.StateCheckers.Add(new TestRequireRolePermissionStateProvider("super-admin")); + myPermission5.AddChild("MyPermission5.ChildPermission1"); + + var myPermission6 = testGroup.AddPermission("MyPermission6"); + myPermission6.AddChild("MyPermission6.ChildDisabledPermission1", isEnabled: false); + myPermission6.AddChild("MyPermission6.ChildPermission2"); + + var myDisabledPermission2 = testGroup.AddPermission("MyDisabledPermission2", isEnabled: false); + myDisabledPermission2.AddChild("MyDisabledPermission2.ChildPermission1"); + var myDisabledPermission2Child2 = myDisabledPermission2.AddChild("MyDisabledPermission2.ChildPermission2"); + myDisabledPermission2Child2.AddChild("MyDisabledPermission2.ChildPermission2.ChildPermission1"); } } diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20230713030300_Initial.Designer.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20240108025904_Initial.Designer.cs similarity index 98% rename from modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20230713030300_Initial.Designer.cs rename to modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20240108025904_Initial.Designer.cs index 56f02e3c47..81cb02079e 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20230713030300_Initial.Designer.cs +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20240108025904_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.SettingManagement.DemoApp; namespace Volo.Abp.SettingManagement.DemoApp.Migrations { [DbContext(typeof(DemoAppDbContext))] - [Migration("20230713030300_Initial")] + [Migration("20240108025904_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "7.0.1") + .HasAnnotation("ProductVersion", "7.0.14") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -35,6 +35,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -44,6 +45,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("nvarchar(256)"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -109,6 +111,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -117,6 +120,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("int"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -209,6 +213,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -221,6 +226,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("datetime2"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -270,6 +276,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -306,6 +313,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("int"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -590,6 +598,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -620,6 +629,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("int"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -835,8 +845,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -866,8 +876,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20230713030300_Initial.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20240108025904_Initial.cs similarity index 98% rename from modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20230713030300_Initial.cs rename to modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20240108025904_Initial.cs index c02df983b0..7a08e47302 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20230713030300_Initial.cs +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20240108025904_Initial.cs @@ -23,8 +23,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations RegexDescription = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), Description = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), ValueType = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: false), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: false) }, constraints: table => { @@ -56,8 +56,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations Code = table.Column(type: "nvarchar(95)", maxLength: 95, nullable: false), DisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: false), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: false), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), @@ -137,8 +137,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations IsStatic = table.Column(type: "bit", nullable: false), IsPublic = table.Column(type: "bit", nullable: false), EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: false), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: false) }, constraints: table => { @@ -162,8 +162,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations ClientIpAddress = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: false), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: false) }, constraints: table => { @@ -178,9 +178,9 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) @@ -247,8 +247,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations ShouldChangePasswordOnNextLogin = table.Column(type: "bit", nullable: false), EntityVersion = table.Column(type: "int", nullable: false), LastPasswordChangeTime = table.Column(type: "datetimeoffset", nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: false), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: false), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/DemoAppDbContextModelSnapshot.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/DemoAppDbContextModelSnapshot.cs index 768f911be8..91c1fad210 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/DemoAppDbContextModelSnapshot.cs +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/DemoAppDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "7.0.1") + .HasAnnotation("ProductVersion", "7.0.14") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -32,6 +32,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -41,6 +42,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("nvarchar(256)"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -106,6 +108,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -114,6 +117,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("int"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -206,6 +210,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -218,6 +223,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("datetime2"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -267,6 +273,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -303,6 +310,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("int"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -587,6 +595,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations b.Property("ConcurrencyStamp") .IsConcurrencyToken() + .IsRequired() .HasMaxLength(40) .HasColumnType("nvarchar(40)") .HasColumnName("ConcurrencyStamp"); @@ -617,6 +626,7 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("int"); b.Property("ExtraProperties") + .IsRequired() .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); @@ -832,8 +842,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -863,8 +873,8 @@ namespace Volo.Abp.SettingManagement.DemoApp.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingDefinitionRecordConsts.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingDefinitionRecordConsts.cs index 92662be22e..65dde011ba 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingDefinitionRecordConsts.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/SettingDefinitionRecordConsts.cs @@ -8,7 +8,7 @@ public class SettingDefinitionRecordConsts public static int MaxDescriptionLength { get; set; } = 512; - public static int MaxDefaultValueLength { get; set; } = 256; + public static int MaxDefaultValueLength { get; set; } = SettingConsts.MaxValueLengthValue; - public static int MaxProvidersLength { get; set; } = 128; + public static int MaxProvidersLength { get; set; } = 1024; } diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index af4d0795ea..5fa268e58c 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@abp/core": "~8.0.1", - "@fortawesome/fontawesome-free": "^5.15.4" + "@fortawesome/fontawesome-free": "^6.5.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/publish-mvc.ps1 b/npm/publish-mvc.ps1 index ee12fc67c3..c9737baeda 100644 --- a/npm/publish-mvc.ps1 +++ b/npm/publish-mvc.ps1 @@ -25,7 +25,7 @@ if ($IsPrerelease) { } $commands = ( - "npm run lerna -- version $Version --yes --no-commit-hooks --skip-git --force-publish", + "npm run lerna -- version $Version --yes --no-commit-hooks --no-git-tag-version --no-push --force-publish", "yarn replace-with-tilde", "cd scripts", "yarn install", diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20240108044306_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20240108044306_Initial.Designer.cs index 333df53077..302fe32cd9 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20240108044306_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231207053812_Initial")] + [Migration("20240108044306_Initial")] partial class Initial { /// @@ -1589,8 +1589,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1620,8 +1620,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20240108044306_Initial.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20240108044306_Initial.cs index e993702885..49dedb5ed0 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20240108044306_Initial.cs @@ -263,9 +263,9 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs index 1def4a0ee9..8d7aa677c6 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -1586,8 +1586,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1617,8 +1617,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20240108044315_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20240108044315_Initial.Designer.cs index ac18b045c6..41a98ace68 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20240108044315_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231207053830_Initial")] + [Migration("20240108044315_Initial")] partial class Initial { /// @@ -1589,8 +1589,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1620,8 +1620,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20240108044315_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20240108044315_Initial.cs index 7a0019fbf6..074d9e6943 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20240108044315_Initial.cs @@ -263,9 +263,9 @@ namespace MyCompanyName.MyProjectName.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs index 20542b282c..a125e23672 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -1586,8 +1586,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1617,8 +1617,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20240108044236_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20240108044236_Initial.Designer.cs index 333258a426..993398bdb4 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20240108044236_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Host.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231207053820_Initial")] + [Migration("20240108044236_Initial")] partial class Initial { /// @@ -1589,8 +1589,8 @@ namespace MyCompanyName.MyProjectName.Host.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1620,8 +1620,8 @@ namespace MyCompanyName.MyProjectName.Host.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20240108044236_Initial.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20240108044236_Initial.cs index 08eca1feca..01cf74227d 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20240108044236_Initial.cs @@ -263,9 +263,9 @@ namespace MyCompanyName.MyProjectName.Host.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs index 6475d362fa..40d1f4ea66 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -1586,8 +1586,8 @@ namespace MyCompanyName.MyProjectName.Host.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1617,8 +1617,8 @@ namespace MyCompanyName.MyProjectName.Host.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20240108044233_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20240108044233_Initial.Designer.cs index 11234086f3..d720b8d921 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20240108044233_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Mvc.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231207053825_Initial")] + [Migration("20240108044233_Initial")] partial class Initial { /// @@ -1589,8 +1589,8 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1620,8 +1620,8 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20240108044233_Initial.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20240108044233_Initial.cs index ef1ec2fdd6..ccf4b1064e 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20240108044233_Initial.cs @@ -263,9 +263,9 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs index 1e8916ad04..8189c80c22 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -1586,8 +1586,8 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1617,8 +1617,8 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.Designer.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20240108044016_Initial.Designer.cs similarity index 99% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.Designer.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20240108044016_Initial.Designer.cs index c52403afd3..771c4cd06e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.Designer.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20240108044016_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231207053523_Initial")] + [Migration("20240108044016_Initial")] partial class Initial { /// @@ -1642,8 +1642,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1673,8 +1673,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20240108044016_Initial.cs similarity index 99% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20240108044016_Initial.cs index a5027f58de..671c999d0c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20240108044016_Initial.cs @@ -284,9 +284,9 @@ namespace MyCompanyName.MyProjectName.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs index 8a0febed15..9634d0695a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -1639,8 +1639,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1670,8 +1670,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20240108044243_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20240108044243_Initial.Designer.cs index 389a2a8cc3..4c54d46943 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20240108044243_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(AuthServerDbContext))] - [Migration("20231207053828_Initial")] + [Migration("20240108044243_Initial")] partial class Initial { /// @@ -1589,8 +1589,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1620,8 +1620,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20240108044243_Initial.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20240108044243_Initial.cs index 7a0019fbf6..074d9e6943 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20240108044243_Initial.cs @@ -263,9 +263,9 @@ namespace MyCompanyName.MyProjectName.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs index c63e7d13e1..64621bc9f5 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs @@ -1586,8 +1586,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1617,8 +1617,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231115065621_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20240108044309_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231115065621_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20240108044309_Initial.Designer.cs index 86eca8fe53..ba9b832925 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231115065621_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20240108044309_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20231115065621_Initial")] + [Migration("20240108044309_Initial")] partial class Initial { /// @@ -1230,8 +1230,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1261,8 +1261,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231115065621_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20240108044309_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231115065621_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20240108044309_Initial.cs index b21456cc73..5e5fa539d2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231115065621_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20240108044309_Initial.cs @@ -263,9 +263,9 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs index 92a676f756..d2a1a0f6d6 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1227,8 +1227,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1258,8 +1258,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231115065707_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20240108044305_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231115065707_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20240108044305_Initial.Designer.cs index 16bf3345ff..3f214a4e82 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231115065707_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20240108044305_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20231115065707_Initial")] + [Migration("20240108044305_Initial")] partial class Initial { /// @@ -1230,8 +1230,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1261,8 +1261,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231115065707_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20240108044305_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231115065707_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20240108044305_Initial.cs index d19146cde5..3ee2a58667 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231115065707_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20240108044305_Initial.cs @@ -263,9 +263,9 @@ namespace MyCompanyName.MyProjectName.Migrations Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), DisplayName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), Description = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), - DefaultValue = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: true), IsVisibleToClients = table.Column(type: "bit", nullable: false), - Providers = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Providers = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true), IsInherited = table.Column(type: "bit", nullable: false), IsEncrypted = table.Column(type: "bit", nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 56d7b7e9bd..29ac3dcc2f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1227,8 +1227,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("uniqueidentifier"); b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); b.Property("Description") .HasMaxLength(512) @@ -1258,8 +1258,8 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("nvarchar(128)"); b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); b.HasKey("Id");