2017-10-20 20 views
1

私は、Webアプリケーション、コードの最初のデータベースを作成するためのデータアクセスレイヤー、およびデータベース内の一部のデータの同期に使用するWindowsサービス(という3つのプロジェクト)のソリューションを用意しています。 他のプロジェクトでもデータレイヤーを参照しました。私は、Webアプリケーションの設定とサービスの設定で同じ接続文字列を使用しています。すべてがWebアプリケーションで正常に動作しますが、データコンテキストにアクセスすると、すべてのテーブルが空になります(列挙によって結果が返されません)。私は間違いがない。 私の質問は、私は何か明白な行方不明ですか?WindowsサービスとEntity Framework

<add name="DataContext" connectionString="Data Source=(localdb)\MSSQLLocalDB; Database=Purple Moose; Integrated Security=True; User Id=purplemoose; Password=password; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 
+0

データベースはどこにありますか?なぜそれが空であるかチェックしましたか? – nvoigt

+0

ローカルデータベースです。実際には空ではありません。私はSSMSからアクセスするために同じ資格情報を使用し、すべてがそこにあります。また、Webアプリケーションもデータにアクセスできますが、Windowsサービスをデバッグするとすべてのテーブルが空になります。 – sandra

+0

接続に同じユーザーを使用していますか?接続文字列はどのように見えますか、ユーザー/パスワードを持っていますか、または現在のWindowsユーザーを認証に使用していますか? – nvoigt

答えて

0

接続文字列は、データベースへのログインに現在のWindowsユーザーを使用します。 、統合セキュリティ(別名Windowsユーザー)およびユーザー名/パスワードの両方を指定しました。その場合

Windows認証は、SQL Serverログインよりも優先されます。 Integrated Security = trueとユーザー名とパスワードの両方を指定すると、ユーザー名とパスワードは無視され、Windows認証が使用されます。

したがって、現在のWindowsユーザーでは常にデータベースに入りますが、それはおそらくLocal Systemなどのサービスに似ています。いずれにしても、ユーザ名/パスワード認証を希望される場合は、を削除してIntegrated Security=trueを削除するか、またはfalseに設定します。

+0

それは本当に良い点です、ありがとうございます。私はそれを取り除き、それ以外のものはすべて残しました。ウェブアプリでも同じことをしました。 Webアプリケーションのすべてがまだ機能していますが、Windowsサービスの「ログインに失敗しました」というエラーが表示されます。それはまだ進行中です。しかし、なぜそれはWebアプリケーションのために同じことを言っていないのですか? – sandra

+0

@sandra LocalDBを使用していることに気付きました。 LocalDBは*オペレーティングシステムのユーザー*にローカルです。それは、ローカルDBのすべての複雑さを通過するには遠すぎます。詳細はこちら[こちら](https://docs.microsoft.com/en-US/sql/database-engine/configure-windows/sql-server-2016-express-localdb)を参照してください。 – nvoigt

+0

あなたは最高です、ありがとうございます。 – sandra

関連する問題