2017-08-03 19 views
3

Visual Studio内の.NET Core 1.xコンソールアプリケーションからEntity Framework Core 1.xを使用するにはどうすればよいですか?ワークフローとASP.NET MVC Core 1.xの開発に慣れていたコマンドを試しましたが、localdbへの接続エラーが発生しました。.Net Core Consoleアプリケーション経由でEntity Framework Core 1.xからlocaldbに接続

ASP.NET MVC Core 1.xアプリケーションでの作業と異なるコンソールアプリケーションでlocaldbを使用するにはどうすればよいですか?

背景

正常に使用ASP.NET MVCコア1.xとEntity Frameworkのコア1.1を持って数回、私はいくつかの面倒な作業を行うには、単純な.NETコアコンソールアプリケーションを作成するために必要な(負荷XMLを新しいデータベースに追加して、XMLの構造に緩やかに一致するテーブルを作成します)。

私はMicrosoft.EntityFrameworkCore.SqlServer(1.1.2)

  • はMicrosoft.EntityFrameworkCore.Tools(1.1.1

    • Microsoft.EntityFrameworkCore.Design(1.1.2)
    • をインストールするNuGetを使用)

    DbSetsでDbContextを作成しました。私はOnConfiguring()メソッドを追加し、オンラインのコード例で見つけたような接続文字列をハードコードしました。私のDbContextは、次のようになります。

    public class ApplicationDbContext : DbContext 
    { 
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
        { 
         optionsBuilder.UseSqlServer(@"Server=(localdb)\\mssqllocaldb;Database=MyXmlExport;Trusted_Connection=True;MultipleActiveResultSets=true"); 
        } 
    
        public DbSet<Author> Authors { get; set; } 
        public DbSet<Thread> Threads { get; set; } 
        public DbSet<Post> Posts { get; set; } 
    } 
    

    は、私はシンプルなもの(「MyXmlExport」)にデータベース名を変更し、作業ASP.NET MVCコア1.xのアプリケーションのappsettings.jsonから接続文字列をつかみました。

    私は初期移行を作成することができました。私は次のエラーを取得する

    update-database 
    

    ::私は、私が使用していたワークフロー、すなわち呼び出しを使用しようとしたとき

    は確立中

    「ネットワーク関連またはインスタンス固有のエラーが発生しましたSQL Serverへの接続(サーバー:SQLネットワークインターフェイス、エラー:50 - ローカルデータベースランタイムエラーが発生しました)指定されたLocalDBインスタンス名が無効です。 "

    Sql Server Object Explorer経由でlocaldbインスタンスに接続できます。私は手動でMyXmlExportデータベースを作成しようとしましたが、少なくとも1つの潜在的な問題を減らすことを望みました。しかし、Visual Studioのツーリングは、コンソールアプリケーションのコンテキストで使用されると、データベースにアクセスできないようです。

    フル・エラー・スタック:

    Full error stack

  • +1

    '@ 'は、逐語的な文字列リテラルを使用していることを意味します。サーバー名とインスタンス名の間で '\ 'をエスケープしないでください。しかしそれがあなたのエラーであるかどうかは分かりません。 – roryWoods

    +0

    ああ...私はそれについても考えなかった。はい...私は@を取り除きました。 (気分が悪い)。ありがとうございました。これを答えにすると、それを答えとしてマークします。 –

    答えて

    5

    @は、逐語的な文字列リテラルを使用していることを意味します。サーバーとインスタンス名の間に\をエスケープしないでください。

    0

    それはボブを助け場合、私は知りませんが、私は次のことを検討したい:

    LocalDbインスタンスを停止してください -

    でインスタンスを列挙
    SqlLocalDb i 
    

    次のコマンドラインからは...その後

    それはそれに影響を持っているかどうかを確認し

    SqlLocalDb stop <INSTANCE NAME> 
    

    を試してみてください。

    エラーの味は、接続文字列の問題を示唆しています。そのため、MDFファイルへのパスがアクセスする各方法について正しいことを確認する価値があります。私は過去にLocalDb接続文字列を手に入れることに問題がありました。

    おそらく関連はありませんが、とにかくそれを投げます。LocalDb MDFをSSMSに接続している場合、SSMSはMDFのファイルアクセス許可を破棄します。切り離した後のMDFファイルとLDFファイル私が言ったように - このようには聞こえませんが問題ですが、あなたのための思考パターンを引き起こすかもしれません。

    +1

    リチャードありがとう!しかし、@ roryWoodsは私が逃したものを見ました...私はoptionsBuilder.UseSqlServer()に@記号は必要ありませんでした。 –

    関連する問題