رادکام
dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDb
Method 'get_Info' in type 'Microsoft.EntityFrameworkCore.Infrastructure.Internal.SqlServerOptionsExtension' from assembly 'Microsoft.EntityFrameworkCore.SqlServer, Version=2.0.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' does not have an implementation.
دراین صورت نسخ Microsoft.EntityFrameworkCore.SQLServer را به (3.1.2) ارتقاء دهید.و نیز ممکن است خطای زیر را دریافت کنیم:
Value cannot be null. (Parameter 'connectionString')
در این صورت باید ConnectionString های مورد نیاز را در فایل appsettings.json تعریف کنیم، بدین صورت:
{
"ConnectionStrings": {
"TokenService": "Server=(localdb)\\mssqllocaldb;Database=TokenService;Trusted_Connection=True;MultipleActiveResultSets=true",
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=TokenService;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
و سپس دستور زیر را اجرا می کنیم:
dotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb
private void InitializeDatabase(IApplicationBuilder app)
{
using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
serviceScope.ServiceProvider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();
var context = serviceScope.ServiceProvider.GetRequiredService<ConfigurationDbContext>();
context.Database.Migrate();
if (!context.Clients.Any())
{
foreach (var client in Config.GetClients())
{
context.Clients.Add(client.ToEntity());
}
context.SaveChanges();
}
if (!context.IdentityResources.Any())
{
foreach (var resource in Config.GetIdentityResources())
{
context.IdentityResources.Add(resource.ToEntity());
}
context.SaveChanges();
}
}
}
برای رفع خطای کامپایل و استفاده از امکانات این متد باید کتابخانه
IdentityServer4.EntityFramework.DbContexts ,
IdentityServer4.EntityFramework.Mappers را به بالای کلاس خود اضافه کنیم.
بیایید نگاهی دقیقتر به آنچه در درون این متد وجود دارد بیاندازیم.serviceScope.ServiceProvider.GetRequiredService().Database.Migrate();
و خط زیر نیز برای ایجاد دیتابیس مربوط به پیکربندی:var context = serviceScope.ServiceProvider.GetRequiredService();
context.Database.Migrate();
در ادامه ما دیتای مربوط به client را مقدار دهی اولیه می کنیم. برای
اینکار از متد های استاتیک GetClients و GetIdentityResources
که به کلاس Config اضافه کرده بودیم بهره می بریم. حال باید برای مقدار دهی
اولیه دیتابیس، متد مربوطه را در متد Configure فراخوانی کنیم. در ابتدای
متد Configure، متد InitializeDatabase را فراخوانی می کنیم. فقط
باید شیء app را به عنوان پارامتر ورودی این متد قرار دهیم. حال که ما تمام
کد هایی که برای مقدار دهی اولیه دیتابیس نیاز داشتیم را پیاده سازی
کردیم، پروژه Token Service را اجرا می کنیم. بعد از اجرای پروژه، به سراغ Visual
Studio رفته و از منوی View کمک گرفته و Sql Server Object Explorer را باز می کنیم.
در زیر (localdb)\MSSQLLocalDB به سراغ دیتابیس
TokenServiceمی رویم، این بانک اطلاعاتی است که تازه ایجاد شده است.1,241بازدید
دیدگاه کاربران
هنوز دیدگاهی ثبت نشده است.
شما میتوانید درباره این مقاله، دیدگاه خود را ثبت کنید.