2

我使用 ASP.NET Entity Framework 的 Code First 从模型创建数据库,当模型更改后需要重新创建数据库时,登录似乎失败。

在 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" />

登录确实有效,因为我可以使用这些凭据从 Management Studio 连接到服务器和数据库。

如果我手动删除数据库,一切正常,并且数据库按预期重新创建,架构反映了对模型所做的更改。

似乎密码或对数据库的访问权限正在丢失。

我还需要做些什么来使它正常工作吗?

4

2 回答 2

1

在连接到已重新创建的数据库时,Code First 使用连接字符串中指定的密码似乎有问题。将其更改为使用受信任的连接可以解决问题,因为不再需要存储密码。

所以,而不是这个:

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

改用以下内容

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

您可能需要将您的帐户或 ASP.NET 使用的帐户添加到 SQL Server 并授予它“dbcreator”权限,以便它可以删除和重新创建数据库。

于 2012-12-10T17:28:20.087 回答
0

我相信使用 sa 可能是一个问题。无论哪种方式,我认为创建一个单独的用户配置文件以在您的连接字符串中使用是一种很好的做法。

于 2012-12-10T17:02:33.213 回答