2017-11-30 16 views
0

会社のSQL ServerにEntity Frameworkのコードを先に展開すると問題が発生します。Entity Framework SqlException:ログインによって要求されたデータベースを開くことができません。 "ユーザー 'domain userid'のログインに失敗しました

EFを使用するASP.NET MVVMアプリケーションがあります。私の開発ラップトップでは完璧に動作します。しかし、SQL Serverにデータベースを移動すると、問題が発生します。

  • 私は私のweb.configで使用している接続文字列は、私が接続してから、この接続を使用してデータベースを照会することができるよと

    <add name="ApplicationInventoryContext" 
        connectionString="Data Source=COMPANY_SQLSERVER; Initial Catalog=ApplicationInventory; Integrated Security=True;Connect Timeout=15;" 
        providerName="System.Data.SqlClient" /> 
    

    は、接続文字列はOKであるべきですVisual Studio SQL Serverエクスプローラー

  • Microsoft SQL Server Management Studio

これは私のDbContextです:

public class ApplicationInventoryContext:DbContext 
{ 
    public DbSet<Application> Applications { get; set; } 

    public ApplicationInventoryContext() : 
     base("name=ApplicationInventoryContext") 
    { 
     Database.SetInitializer<ApplicationInventoryContext>(null); 
    } 
} 

これは私がデータベースを照会リポジトリです:どのように

Entity Framework Exception SqlException: Cannot open database requested by the login
SqlException: Cannot open database requested by the login .
The login failed for user ' domain\userid’

:私は、次のエラーを得たアプリケーションを実行すると

public class DisconnectedRepository 
{ 
    public List<Application> GetApplicationsList() 
    { 
     using (var context = new ApplicationInventoryContext()) 
     { 
      return context.Applications.AsNoTracking().ToList(); 
     } 
    } 
    ..................... 
} 

上記の2つの接続で使用しているのと同じログインがエラーに表示された場合、これは起こりますか?

+0

DbContextを作成する際に接続文字列のキー名を指定してみてください。このQAを参照してくださいhttps://stackoverflow.com/questions/4805094/pass-connection-string-to-code-first-dbcontext – Steve

+2

あなたのウェブアプリケーションはあなたのように動作しません。通常、セキュリティ上の理由から、セキュリティ保護された匿名ユーザーとして実行されます。 「Integrated Security」は、プロセスを所有しているユーザーがDBにアクセスできる場合にのみ機能します。 – Eris

+0

@ Steve:Steveありがとうございました。正しい方向に私を送ってくれてありがとう。私はデバッグに時間を費やして、私はDbContextの作成でconnectionStringを指定しなければなりませんでした – DTG

答えて

3

接続文字列はIntegrated Security=Trueです。つまり、アプリケーションを実行しているプロセスのIDを使用してデータベースにアクセスしようとしています。これはウェブアプリケーションであるため、おそらくローカルにIISExpressを使用している可能性があります。つまり、ログインしているユーザー(つまりあなた)のIDとして実行されています。コンピュータにログインするための資格情報を使用して、会社のSQLサーバーにログインする権限を持っていますか?そうでなければ、あなたの問題があります。

私には珍しいことは、あなたが開発マシンから企業のSQL Serverにヒットしようとしていることです。ほとんどの組織では、開発者がプロ​​ダクションにアクセスすることを許可していないため、自分が行っていることを実行しようとしているポリシーに違反しているのか、

  1. は、あなたのドメインは、企業のSQL Server上のログインアカウント与える:

    はここに2つのオプションがあります。あなたが唯一の開発者でなければ、すべての開発者は同じことをする必要があるから、これは特に良い選択肢ではありません。

  2. 統合セキュリティではなく、ユーザーIDとパスワードを使用するようにSQL Serverログインを作成し、接続文字列を変更します。それでも、すべての開発者は企業のSQL Serverへのログイン資格情報を知っているので、これは素晴らしい選択肢ではありません。

0

私はSteveのおかげで解決策を投稿します。

>

public class ApplicationInventoryContext:DbContext { public DbSet Applications { get; set; }

public ApplicationInventoryContext() : 
            base("Data Source=COMPANY_SQLSERVER;           >           Initial Catalog=ApplicationInventory; 
             Integrated Security=True;  
             Connect >Timeout=15;") 
{ 
    Database.SetInitializer<ApplicationInventoryContext>(null); 
} 

}

そして、それは今、完全に働いた:私が見つけた応答はここ stackoverflow.com/questions/4805094/

だったので、私がやったことは、単に下のようDBContextのコンストラクタを修正しました。 他の方法がある上記のリンクを参照してください。

関連する問題

 関連する問題