ASP.NET Core 2.0'a yükselttikten sonra geçişler oluşturulamıyor


109

ASP.NET Core 2.0'a yükselttikten sonra artık geçişler oluşturamıyorum.

Ben alıyorum

"'Program' sınıfında 'BuildWebHost' yöntemi çağrılırken bir hata oluştu. Uygulama hizmet sağlayıcısı olmadan devam ediliyor. Hata: Bir veya daha fazla hata oluştu. (Oturum açma tarafından talep edilen veritabanı" ... "açılamıyor. Oturum açma başarısız oldu. Oturum açma "..." kullanıcısı için başarısız oldu "

ve

"'MyContext' türünde bir nesne oluşturulamıyor. Projeye 'IDesignTimeDbContextFactory' uygulaması ekleyin veya tasarım zamanında desteklenen ek desenler için https://go.microsoft.com/fwlink/?linkid=851728 adresine bakın ."

Daha önce çalıştırdığım komut $ dotnet ef migrations add InitialCreate --startup-project "..\Web"(DBContext ile proje / klasörden) idi.

Bağlantı dizisi: "Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"

Bu benim Program.cs

 public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
       WebHost.CreateDefaultBuilder(args)
           .UseStartup<Startup>()
           .Build();
}

3
Muhtemelen sorun Program.cs'de değildir. Muhtemelen Configure yönteminizin sonunda çekirdek verileri yüklemek için bir talimatın kullanılmasıdır: DbInitializer.Initialize (bağlam); Bu talimata sahipseniz, yorum yapın: //DbInitializer.Initialize(context); Ardından test etmek için Geçiş talimatlarını çalıştırın. Sorun ortaya çıkarsa, DbInitializer.cs sınıfını takip edin.
Miguel Torres C

1
MyContext sınıfınız başka bir sınıf kitaplığı projesinde mi?
Orhun

Burada da aynı sorun, bağlam başka bir kütüphanede. İd, bağlama daha az yapılandırıcı bir parametre eklerse, geçişler çalışıyor, ancak aynı hatayla: ('Program' sınıfında 'BuildWebHost' yöntemi çağrılırken bir hata oluştu. Uygulama hizmeti sağlayıcısı olmadan devam ediliyor. Hata: Nesne başvurusu ayarlanmadı bir nesnenin örneğine.)
iBoonZ

Sonunda çözdün mü?
Konrad Viltersten

@MiguelTorresC bu yorum için teşekkürler. Tohumlama Yöntemlerimi yorumladım ve Göçler yeniden çalışmaya başladı. Çok teşekkürler !!!
Amit Philips

Yanıtlar:


123

Web projenizin içine IDesignTimeDbContextFactory uygulayan bir sınıf ekleyebilirsiniz.

İşte örnek kod:

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CodingBlastDbContext>
{
    public CodingBlastDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<CodingBlastDbContext>();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        builder.UseSqlServer(connectionString);
        return new CodingBlastDbContext(builder.Options);
    }
}

Ardından, Veritabanı projenize gidin ve komut satırından aşağıdakileri çalıştırın:

dotnet ef migrations add InitialMigration -s ../Web/

dotnet ef database update -s ../Web/

-s stands for startup project and ../Web/ is the location of my web/startup project.

kaynak


2
Anlıyorum: 'appsettings.json' yapılandırma dosyası bulunamadı ve isteğe bağlı değil. Fiziksel yol 'C: \ Users \ XXX \ Documents \ Visual Studio 2017 \ Projects \ XXX \ src \ XXX.Api \ bin \ Debug \ netcoreapp2.0 \ appsettings.json' şeklindedir. Uygulama ayarlarım C: \ Users \ XXX \ Documents \ Visual Studio 2017 \ Projects \ XXX \ src \ XXX.Api konumunda.
2017

Appsettings.json dosyasının yerel olarak kopyalanacak şekilde ayarlandığından emin olun, sorunun bulunamamasıyla
çözülmelidir

1
Bu çözüm, ana bilgisayar uygulamanıza Entity Framework bağımlılığı sunar (benim durumumda bu bir Web projesidir). Bu aşmanın bir yolu var mı? Depo kitaplığımın EF öğelerini tutmasını ve EF'i web uygulamasına tanıtmamasını istiyorum.
Banoona

Kabul edilen cevap bu olsa da, bu daha iyi: stackoverflow.com/a/52671330/1737395 Gerçekten de, geçişi --verbose bayrağıyla çalıştırmak büyük ölçüde yardımcı oluyor
barbara.post

73

Gerek yok IDesignTimeDbContextFactory.

Çalıştırmak

add-migration initial -verbose

bu, altındaki detayları ortaya çıkaracak

IWebHost'a 'Program' sınıfından erişilirken bir hata oluştu. Uygulama servis sağlayıcısı olmadan devam ediyor.

sorunun temel nedeni olan uyarı .

Benim durumumda , sorun, aşağıdaki hataya neden olan , sahip olmak ApplicationRole : IdentityRole<int>ve çağırmaktıservices.AddIdentity<ApplicationUser, IdentityRole>()

System.ArgumentException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,
TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type 'TRole'.
---> System.TypeLoadException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.UserStoreBase`8[TUser,TRole,TKey,TUserClaim,
TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type parameter 'TRole'.

3
Evet -Verbose, gerçek sorunu gerçekten ortaya çıkarmaya yardımcı olur. Benim durumumda, başlangıca AddDbContext hizmetleri eklemedim.
sudhakarssd

3
dotnet ef migrations add InitialCreate --verbose
barbara.post

4
@tchelidze Bunun için teşekkür ederim, benim durumumda ApplicationDbContext'imde parametresiz bir kurucuya sahip değildim.
Tiago Ávila

1
Bu harika bir ipucu, kabul edilen cevap olmalı
Avrohom Yisroel

1
Çok teşekkür ederim, bu benim sorunumu bulmama ve çözmeme yardımcı oldu. Benim durumumda, "'Data.Access.DAL.MainDbContext' türü için parametresiz bir kurucu tanımlanmadı" idi ve bu nedenle, parametreleri kurucudan kaldırdım ve sihir gibi çalıştı!
Sarah

25

Çözüm 1: (Vakaların% 99'unda sorunu bulun)

Web Uygulaması projesini Başlangıç ​​Projesi olarak ayarlayın

Aşağıdaki komutları -verboseseçenekle çalıştırın .

Add-Migration Init -Verbose

-verbose seçeneği aslında gerçek sorunu ortaya çıkarmaya yardımcı olur, ayrıntılı hatalar içerir.

2.Çözüm:

Rename BuildWebHost()için CreateWebHostBuilder()çünkü Entity Framework Core toolsbir bulmak için beklemek CreateHostBuilderyöntemini yapılandırır söz konusu uygulamayı çalıştırmadan konak.

.NET Core 2.2

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
} 

.NET Core 3.1

yeniden adlandırma BuildWebHost()içinCreateHostBuilder()

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

3. Çözüm:

DbcontextBağımlılık enjeksiyonuna eklediğinizden emin olun : AddDbContext<TContext>hem DbContext türünüzü hem de ilgili olanı servis kabından enjeksiyon TContextiçin uygun DbContextOptions<TContext>hale getirir. Bu, DbContexttürünüze kabul eden bir yapıcı argümanı eklemeyi gerektirir DbContextOptions<TContext>.

Örnek: Startup.cs içinde

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString));
}

AppDbContext kodu:

public class AppDbContext: DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
      :base(options)
    { }

}

1
Bu benim için çalıştı. Dan program.cs BuildWebHost işlevini değiştirdi public static IWebHostBuilder BuildWebHost(string[] args)etmek public static IWebHost BuildWebHost(string[] args)ile .Build()artık işlevi dahil
zola25

1
Arkadaşlar, ASP.NET Core 2.1+ kullanıyorsanız, BuildWebHost yönteminin farklı bir adı olacaktır - Docs.microsoft.com/en-us/aspnet/core/migration/… nedeniyle CreateWebHostBuilder, bu nedenle CreateWebHostBuilder'ı BuildWebHost olarak yeniden adlandırın ve geçiş bulacaktır WebHost'u oluşturun ve ondan DbContext'i alın.
KEMBL

2
Teşekkürler dostum, kullanmadan yapılandırmak için 2 saat harcadıktan sonra çözüldüIDesignTimeDbContextFactory
Azri Zakaria

3
"-Verbose" bayrağı için teşekkürler. İstisnanın temel nedenini bulmama yardımcı oldu.
Sergey_T

21
public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
    }
}

Sadece adlandırmak BuildWebHost()için CreateWebHostBuilder()göçler varsayılan olarak bu yöntemi kullanmak çünkü.


4
NE. Bu, bu konuyla ilgili her sayfada ilan edilmelidir , ciddisiniz . Anında başarı. Teşekkür ederim.
Chaim Eliyah

Günümü kurtar !!! Bu çok garip bir hata. Önizleme 7 ile .net çekirdek 3.0 kullanıyorum ve bu hata hala var
D Todorov


D Todorov BuildWebHost () adını CreateHostBuilder () olarak yeniden adlandırmanız yeterli
Ali Bayat

1
@WernerCD Cuz Worker, IHostBuilder of Net Core 3'ü uygulayan CreateHostBuilder () yöntemini kullanıyor
sherox

11

Benim durumumda, sorunun nedeni birden çok başlangıç ​​projesiydi. Çözümümde üç projem var: Mvc, Api ve Dal. Dal projesinde DbContext ve Göçler.

Birden çok başlangıç ​​projesi yapılandırmıştım. Başlat'a tıkladığımda hem Mvc hem de Api projeleri çalışıyordu. Ama bu durumda bu hatayı alıyordum.

"'MyContext' türünde bir nesne oluşturulamıyor. Projeye 'IDesignTimeDbContextFactory' uygulaması ekleyin veya tasarım zamanında desteklenen ek desenler için https://go.microsoft.com/fwlink/?linkid=851728 adresine bakın ."

Mvc'yi tek başlangıç ​​projesi olarak ayarladıktan ve Paket Yöneticisi Konsolunda Dal'ı seçtikten sonra başarılı bir şekilde geçiş ekleyebildim.


1
Teşekkür ederim, bana da aynı şey oldu. Başlangıç ​​projesini Başlangıç ​​/ Program sınıflarının bulunduğu yere değiştirmem gerekiyordu. Hata mesajı kötü bir şakadır.
Ľuboš Čurgó

1
Çıktı mesajları gerçekten sinir bozucuydu. Beklenmedik bir şekilde, başlangıç ​​projesi seçmedim. DbContext'in yaratılamamasının nedeni buydu. Teşekkürler.
upkit

1
Teşekkürler efendim ... Zamanımın çoğu kurtarıldı
Naveed Khan

7

AppContext.cs içinde AppContext sınıfının yanı sıra başka bir sınıf ekleyin:

// required when local database deleted
public class ToDoContextFactory : IDesignTimeDbContextFactory<AppContext>
{
    public AppContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<AppContext>();
          builder.UseSqlServer("Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true");
        return new AppContext(builder.Options);
    }
}

Bu, ikinci probleminizi çözecektir:

"'MyContext' türünde bir nesne oluşturulamıyor. Projeye 'IDesignTimeDbContextFactory' uygulaması ekleyin,

Bundan sonra, ilk geçişi ekleyebilecek ve güncelleme-veritabanı komutunu çalıştırarak yürütebileceksiniz . Ancak, yerel SqlServer'ınızda henüz DataBase olmadığında bu komutları çalıştırırsanız, ilk hatanız gibi bir uyarı alırsınız: "Bir hata

'Program' sınıfında 'BuildWebHost' yöntemi çağrılırken oluştu ... Oturum açma başarısız oldu. Kullanıcı için giriş başarısız oldu '...'"

Ancak bu bir hata değildir çünkü göç oluşturulacak ve yürütülebilir. Bu nedenle, bu hatayı ilk kez görmezden gelin ve daha sonra, Db var olacağından bir daha olmayacak.


4

lütfen referansa sahip olduğunuzu doğrulayın

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />

5
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />Bu referansı içeren kullanıyorum . Yukarıdakileri de dahil etmeyi denedim, ancak değişiklik yok.
ruhm

4

Sen bu çözümü deneyebilirsiniz bu tartışma ilham, bu yazı ile .

public static IWebHost MigrateDatabase(this IWebHost webHost)
{
    using (var scope = webHost.Services.CreateScope())
    {
        var services = scope.ServiceProvider;

        try
        {
            var db = services.GetRequiredService<MyContext>();
            db.Database.Migrate();
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while migrating the database.");
        }
    }

    return webHost;
}
public static void Main(string[] args)
{
    BuildWebHost(args)
        .MigrateDatabase()
        .Run();
}

2
Hala alıyorum: 'IDesignTimeDbContextFactory <DatabaseContext>' uygulaması ekle ......
Reft

4

Bana gerçekten yardımcı olan bir şey şu makaleydi: https://elanderson.net/2017/09/unable-to-create-an-object-of-type-applicationdbcontext-add-an-implementation-of-idesigntimedbcontextfactory/

Temel fikir, .net core 1'den 2'ye geçişte tüm db başlatmanın StartUp.cs'den Program.cs'ye taşınması gerektiğidir. Aksi takdirde, EF görevleri, görevleri yaparken DB girişlerinizi dener ve çalıştırır.

"Resmi geçiş belgelerinde ( https://docs.microsoft.com/en-us/ef/core/miscellaneous/1x-2x-upgrade )" Veritabanı başlatma kodunu taşı "başlıklı güzel bir bölüm var. missed. Bu yüzden, benim yaptığım gibi herhangi bir tavşan deliğine girmeden önce, bunun sizin bir IdesignTimeDbContextFactory uygulamasını ekleme ihtiyacınıza neden olmadığından emin olun. "


Teşekkürler, bu da bana yardımcı oldu.
Sergey

3

Nereden

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dbcontext-creation

Yeni bir ASP.NET Core 2.0 uygulaması oluşturduğunuzda, bu kanca varsayılan olarak dahil edilir. EF Core ve ASP.NET Core'un önceki sürümlerinde, araçlar uygulamanın hizmet sağlayıcısını elde etmek için doğrudan Startup.ConfigureServices'i çağırmaya çalışır, ancak bu desen artık ASP.NET Core 2.0 uygulamalarında düzgün çalışmaz. Bir ASP.NET Core 1.x uygulamasını 2.0'a yükseltiyorsanız, Program sınıfınızı yeni kalıbı takip edecek şekilde değiştirebilirsiniz.

.Net Core 2.x'e Fabrika Ekleme

public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
    {
        public BloggingContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
            optionsBuilder.UseSqlite("Data Source=blog.db");

            return new BloggingContext(optionsBuilder.Options);
        }
    }

3

Bu sorunu yaşadım ve bu Set Tarafından çözüldü -> Web Uygulaması (Dahil Edilen Program.cs) Projesi -> "Başlangıç ​​Projesi Olarak Ayarla"

Ardından -> add-migration initial -verbose komutunu çalıştırın

Paket Yöneticisi Konsolunda

Başlangıç ​​Projesi olarak ayarla


Teşekkürler, benim için işe yarayan tek çözüm web projesini başlangıç ​​projesi olarak ayarlamaktı ve yapılması gereken de buydu.
user3012760

3

Bu IDesignTimeDbContextFactory şeyinden kaçınmak istiyorsanız: Başlangıçta herhangi bir Seed yöntemi kullanmadığınızdan emin olun. Başlangıçta statik bir tohum yöntemi kullanıyordum ve bu benim için bu hataya neden oluyordu.


2

Önceden, çekirdek verilerini Startup.cs içindeki Configure yönteminde yapılandırmıştınız. Artık Configure yöntemini yalnızca istek ardışık düzenini ayarlamak için kullanmanız önerilir. Uygulama başlangıç ​​kodu Main yöntemine aittir.

Yeniden düzenlenen Ana yöntem. Program.cs dosyasına aşağıdaki başvuruları ekleyin:

Microsoft.Extensions.DependencyInjection kullanarak;

MyProject.MyDbContextFolder kullanarak;

public static void Main(string[] args)
{
    var host = BuildWebHost(args);

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;
        try
        {
            var context = services.GetRequiredService<MyDbConext>();
            DbInitializer.Initialize(context);
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while seeding the database.");
        }
    }

    host.Run();
}



2

Benim durumumda sorunu aldım çünkü Startup.cs dosyamda SeedData.EnsurePopulated () adında bir yöntem çağırılıyordu .

public class Startup
{
    public Startup(IConfiguration configuration) => Configuration = configuration;
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        //
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseDeveloperExceptionPage();
        app.UseStatusCodePages();
        app.UseStaticFiles();
        app.UseSession();
        app.UseMvc(routes =>
        {
            //
        });

        SeedData.EnsurePopulated(app);
    }
}

SeedData sınıfının işi , veritabanı tablosuna ilk verileri eklemektir. Kodu:

public static void EnsurePopulated(IApplicationBuilder app)
    {
        ApplicationDbContext context = app.ApplicationServices.GetRequiredService<ApplicationDbContext>();
        context.Database.Migrate();
        if (!context.Products.Any())
        {
            context.Products.AddRange(
            new Product
            {
                Name = "Kayak",
                Description = "A boat for one person",
                Category = "Watersports",
                Price = 275
            },
            ....
            );
            context.SaveChanges();
        }
    }

ÇÖZÜM

Geçiş yapmadan önce , Startup.cs dosyasındaki SeedData sınıfının çağrılmasını yorumlamanız yeterlidir .

// SeedData.EnsurePopulated(app);

Bu benim sorunumu çözdü ve umarım senin problemin de aynı şekilde çözülür.


1

Ben de aynı problemle karşılaştım. Çözümde iki projem var. hangi

  1. API
  2. Bağlam modellerini tutan hizmetler ve depo

Başlangıçta, API projesi Başlangıç ​​projesi olarak belirlendi.

Başlangıç ​​projesini bağlam sınıflarını tutan projeyle değiştirdim . Visual Studio kullanıyorsanız , bir projeyi Başlangıç ​​projesi olarak ayarlayabilirsiniz:

çözüm gezginini açın >> bağlam projesine sağ tıklayın >> Başlangıç ​​projesi olarak ayarla'yı seçin


1

Öncelikle veritabanınızı şu şekilde yapılandırdığınızdan emin olun: Startup.cs Benim durumumda, aşağıda belirtilenleri belirtmediğim için bu hatayı alıyordum.Startup.cs

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly("<Your Project Assembly name where DBContext class resides>")));

1

ASP.NET Core 3.1 ve EntityFrameWorkCore 3.1.0 kullanımı. Bağlam sınıfının OnConfiguringini yalnızca parametresiz bir yapıcıyla geçersiz kılma

```protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json")
               .Build();
            var connectionString = configuration.GetConnectionString("LibraryConnection");
            optionsBuilder.UseSqlServer(connectionString);
        }
    }
```

1

Hata ile karşı karşıyaydım

"'MyContext' türünde bir nesne oluşturulamıyor. Projeye 'IDesignTimeDbContextFactory' uygulaması ekleyin veya tasarım zamanında desteklenen ek desenler için https://go.microsoft.com/fwlink/?linkid=851728 adresine bakın ."

Sorunum bu şekilde çözüldü. Çözüm dizininizdeyken aşağıdaki komutu çalıştırın

 dotnet ef migrations add InitialMigration --project "Blog.Infrastructure" --startup-project "Blog.Appication"

Burada Uygulama, Startup.cs sınıfını içeren başlangıç ​​projemdir ve Altyapı, DbContext sınıfını içeren projemdir.

daha sonra aynı yapıyı kullanarak güncellemeyi çalıştırın.

dotnet ef database update --project "Blog.Infrastructure" --startup-project "Blog.Application"

0

Eski Microsoft.EntityFrameworkCore.Tools.DotNet'e başvurduğumdan beri aynı sorunu yaşıyorum

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />

Daha yeni sürüme yükselttikten sonra çözüldü


0

Ana projenin appsettings.json dosyasında, "Çıktı dizinine kopyala" yı "Her zaman kopyala" olarak ayarladım ve işe yaradı.


0

.Net çekirdek konsol uygulamaları için örnek DB bağlam sınıfı

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace EmailServerConsole.Data
{
    public class EmailDBContext : DbContext
    {
        public EmailDBContext(DbContextOptions<EmailDBContext> options) : base(options) { }
        public DbSet<EmailQueue> EmailsQueue { get; set; }
    }

    public class ApplicationContextDbFactory : IDesignTimeDbContextFactory<EmailDBContext>
    {
        EmailDBContext IDesignTimeDbContextFactory<EmailDBContext>.CreateDbContext(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
            var builder = new DbContextOptionsBuilder<EmailDBContext>();
            var connectionString = configuration.GetConnectionString("connection_string");
            builder.UseSqlServer(connectionString);
            return new EmailDBContext(builder.Options);
        }
    }
}

Bu, yazarların sorusunu yanıtlasa da, bazı açıklayıcı sözcüklerden ve belgelere bağlantılardan yoksundur. Ham kod parçacıkları, etrafında bazı ifadeler olmadan pek yardımcı olmaz. Ayrıca bulabilirsiniz iyi bir cevap yazmayı çok yararlı. Lütfen cevabınızı düzenleyin.
hellow

0

Yapılandırmaya json dosyası (bağlantı dizesinin bulunduğu yer) eklemek için başlangıç ​​sınıfı yapıcısında da kullanabilirsiniz. Misal:

    IConfigurationRoot _config;
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json");

        _config = builder.Build();
    }

0

Değiştim çünkü benim için öyleydi Output Typebenim başlangıç projesi Console Applicationiçin Class Library.

Console ApplicationHile yapmak için geri dönmek .


0

Bu sorunu şu özelliklere sahip bir çözümde yaşadım:

  • bir .NET Core 2.2 MVC projesi
  • bir .NET Core 3.0 Blazor projesi
  • .NET Standard 2.0 sınıf kitaplığı projesindeki DB Bağlamı

Blazor projesi başlangıç ​​projesi olarak ayarlandığında "nesne oluşturulamıyor ..." mesajını alıyorum, ancak MVC projesi başlangıç ​​projesi olarak ayarlandıysa değil.

Bu beni şaşırtıyor, çünkü Paket Yöneticisi Konsolunda (geçişi oluşturduğum yer) Varsayılan proje, DB Bağlamını içeren bir C # sınıf kitaplığına ayarlıyım ve ayrıca DB bağlamını da belirtiyorum ek göç çağrım add-migration MigrationName -context ContextName , bu yüzden Visual Studio'nun şu anda hangi başlangıç ​​projesinin ayarlandığını önemsemesi garip görünüyor.

Bunun nedenini tahmin ediyorum, Blazor projesi başlangıç ​​projesi olduğunda, PMC başlangıç ​​projesinden .NET sürümünü Core 3.0 olarak belirliyor ve ardından bunu .NET Standard 2.0 sınıfında geçişleri çalıştırmak için kullanmaya çalışıyor. kütüphane ve bir tür çatışmaya girme.

Sebep ne olursa olsun, başlangıç ​​projesini Blazor projesi yerine Core 2.2'yi hedefleyen MVC projesine değiştirmek sorunu çözdü


0

Benim için sorun, geçiş komutlarını yanlış proje içinde çalıştırmamdı. DbContext'i içeren proje yerine Startup.cs'yi içeren proje içindeki komutları çalıştırmak, bu belirli sorunu aşmama izin verdi.


0

Benim durumumda, Başlangıç ​​projesini init'te ayarlamak yardımcı oluyor. Bunu çalıştırarak yapabilirsiniz

dotnet ef migrations add init -s ../StartUpProjectName

-4

Aynı problemim vardı. Ap.jason'u application.jason olarak değiştirdi ve sorunu düzeltti

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.