5

私は、EntityFrameworkCore.SqlServer 2.0を使用してasp。net core wep api 2.0アプリケーションを開発しました。これは、データベースの第1のアプローチを使用して開発されます。 dbcontextアプリケーションを使用してエンティティにアクセスしようとすると、モードが中断されます。アプリケーション状態が中断状態になる理由を見つけることができません。これを解決するためにお手伝いください。アプリケーションは、dbcontextにアクセスしています.net core web api 2.0 with entity frameworkコア2.0データベースの最初のアプローチ

以下は、DBContextクラスのOnConfiguringメソッドです。あなたは、コントローラ内のコンテキストを作成しないでくださいすべての

// GET api/values 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     VotingAppDBContext context = new VotingAppDBContext(); 
     var questions = context.Questions.ToList(); 
     return new string[] { "value1", "value2" }; 
    } 

Installed packages

Application error

+0

私は正確な問題があります。これまでのところどのように修正するのか分かりません。 – hidden

+0

あなたのデータベースにはスキーマがありますか?私がスキーマを削除した後、足場を動かし始めた。 – hidden

+0

私の問題が見つかりました。私はVARCHAR(max)を使用して列の長さを定義しました。何とかEFがそれを理解せず、暗黙に失敗します。 – hidden

答えて

1

1.-まずコントローラにdbcontextエンティティにアクセスするために使用されるコードブロックの下

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     if (!optionsBuilder.IsConfigured) 
     { 
      optionsBuilder.UseSqlServer(@"Server=(local);Database=VotingAppDB;User ID=sa;Password=123;"); 
     } 
    } 

私の場合は、UnitOfWorkを使用してIUnitOfWork instanとして注入すると、あなたのコードをテストできないものにするので、依存関係を使って 'new'を使用しないでください実際には、MyConextの拡張であり、StartUpクラス内に挿入します。これを行うには、次のようなプライベートメソッド(1つのプライベートコールでこれを実行する)があります。

プライベートvoid AddEntityFrameworkAndDbContext(IServiceCollectionサービス) { services.AddEntityFrameworkSqlServer();

 var migrationsAssemblyName = typeof(MyContext).GetTypeInfo().Assembly.GetName().Name; 
     services.AddDbContext<MyContext>(options => 
     { 
      options.UseSqlServer(
       "MY CONNECTION STRING GOES HERE (BUT I RETREIVE IT FROM ANOTHER SERVICE)", 
       sqlServerOptionsAction: sqlOptions => 
       { 
        sqlOptions.MigrationsAssembly(migrationsAssemblyName); 
        sqlOptions.EnableRetryOnFailure(maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); 
       }); 
     }, 
     ServiceLifetime.Scoped // Showing explicitly that the DbContext is shared across the HTTP request scope (graph of objects started in the HTTP request) 
       ).AddUnitOfWork<MyContext>(); // This is because I'm also using EF Core Unit of work NuGet Package 
    } 

私が言ったように私は(第二2.-起動クラスで

 // Add EF, and UoW 
     AddEntityFrameworkAndDbContext(services); 

、ConfigureServices(IServiceCollectionサービス)からそのプライベートメソッドを呼んでいるが、私はこれがあなたであることを言うだろう本当の問題)私はあなたがbase.OnConfiguring(オプション)を逃したと言うでしょう。 UnitOfWorkのプロジェクトは読書に値することを、取る、また How to setup EF6 Migrations with ASP.NET Core

:また、私は数週間前に書いたこの答えをご覧ください

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     if (!optionsBuilder.IsConfigured) 
     { 
      optionsBuilder.UseSqlServer(@"Server=(local);Database=VotingAppDB;User ID=sa;Password=123;"); 
     } 
     base.OnConfiguring(optionsBuilder); 
    } 

:あなたのコンテキストでは、それは次のようにする必要がありますここでそれを見て:私はそれが役に立てば幸いhttps://github.com/arch/UnitOfWork

ファンを

0

ないシュール問題がまだ存在する場合はe。私は今日同じ問題を抱えていました。修正は、すべてのnugetパッケージ(私の場合はMicrosoft.Extensions.Configurationなど)を最新バージョンに更新することでした。

+0

私の場合は、自己参照の主キーが原因です。私がその参照を削除したとき、それは働いた。 –

-1

これは、スキーマ内に自己参照主キーがある場合に発生します。 SQL Serverのデータベースダイアグラムを使用すると、それをグラフィカルに表示できます。これを解決するには、その参照を削除する必要があります。

関連する問題