2011-10-11 76 views
1

我有一个基于实体框架的MVC应用程序链接到SQL服务器。为什么设置“DropCreateDatabaseIfModelChanges”时Entity Framework无法登录到SQL Server?

这不是一个生产服务器,所以我使用实体框架代码优先,并在模式更改时利用代码优先/删除数据库。

我有以下连接字符串:

<add name="MyDbContext" 
    connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=appdb;User Id=xxx;Password=yyy;" 
    providerName="System.Data.SqlClient" /> 

我有EF/SQL的各种问题,到最后,我创建了一个新的用户与sysadmin服务器角色,我创建了数据库appdb,设置新用户的默认数据库为appdb,在User Mapping下,我给用户db_owner权限(在用户和默认模式下,它表示dbo)。

无论如何,一切都按预期工作后,我这样做 - 数据库被删除/重新创建所需的表。

但是,我现在已经改变了我的课程。使用DropCreateDatabaseIfModelChanges导致一个黄色画面Unable to login to SQL Server with user:xxx错误和SQL服务器日志显示Login failed for user 'xxx'. Reason: Password did not match that for the login provided. [CLIENT: <local machine>]

如果我启动上调试应用程序,它显示以下内容: This operation requires a connection to the 'master' database. Unable to create a connection to the 'master' database because the original database connection has been opened and credentials have been removed from the connection string. Supply an unopened connection.

如果我改变从DropCreateDatabaseIfModelChangesDropCreateDatabaseAlways - 一切正常预计....我可以改回来,并继续使用应用程序没有问题。

我真的不明白这一点,并想知道是否有人知道发生了什么?

回答

3

尝试将Persist Security Info=True添加到您的连接字符串中。

编辑:

设置坚持安全信息,以真正使数据库连接保持敏感的用户信息=密码。我不知道在删除和重新创建数据库时EF做了什么神奇的工作,但它最有可能重置连接状态并需要在打开的连接上进行新的身份验证。没有坚持安全信息打开连接不能再次验证用户,因为它不知道他的密码。

Btw。您也可以尝试下载EFv4.1 Update 1或更高版本的EFv4.2。我认为它应该解决这个问题。

+0

这工作得很好! + 1 /答案。非常感谢......尽管有人想为自己学习问题而不是为每个问题提出问题(尽管目前似乎没有这样的方式!),但我不认为你可以解释一下这个问题/究竟是什么错误? – Wil

相关问题