2

ASP.NET EntityFrameworkのCodeFirstを使用してモデルからデータベースを作成していますが、モデルの変更後にデータベースを再作成する必要がある場合、ログインが失敗するようです。

Global.asaxには、次のものがあります。

protected void Application_Start()
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EntriesContext>());

    // ...
}

私のコントローラーには、次のものがあります。

public ActionResult Index()
{
    // This is just to force the database to be created
    var context = new EntriesContext();
    var all = (from e in context.Entries select e).ToList();
}

データベースが存在しない場合は、問題なく作成されます。ただし、モデルに変更を加え、再構築して更新すると、次のエラーが発生します。

Login failed for user 'sa'.

私の接続文字列は次のようになります。

<add name="EntriesContext"
     connectionString="Server=(LOCAL);Database=MyDB;User Id=sa;Password=password"
     providerName="System.Data.SqlClient" />

これらの資格情報を使用してManagementStudioからサーバーとデータベースに接続できるため、ログインは確実に機能します。

データベースを手動で削除すると、すべてが正しく機能し、モデルに加えられた変更を反映したスキーマを使用して、データベースが期待どおりに再作成されます。

パスワードまたはデータベースへのアクセスが失われているようです。

これを機能させるために他に何かする必要がありますか?

4

2 に答える 2

1

再作成されたデータベースに接続するときに、コードファーストで接続文字列に指定されたパスワードを使用する際に問題が発生したようです。信頼できる接続を使用するようにこれを変更すると、パスワードを保存する必要がなくなるため、問題を回避できます。

したがって、これの代わりに:

Server=(LOCAL);Database=MyDB;User Id=sa;Password=password

代わりに以下を使用してください

Server=(LOCAL);Database=MyDB;Trusted_Connection=true

アカウントまたはASP.NETで使用されているアカウントをSQLServerに追加し、データベースを削除して再作成できるように、アカウントに「dbcreator」アクセス許可を付与する必要がある場合があります。

于 2012-12-10T17:28:20.087 に答える
0

saの使用が問題になると思います。いずれにせよ、接続文字列で使用する別のユーザープロファイルを作成することをお勧めします。

于 2012-12-10T17:02:33.213 に答える