2

我正在使用 ASP.NET MVC3 的网站上工作,并按照 MVC Music Store 教程进行操作,但可以根据需要进行编辑。我现在正试图在我的测试部署服务器上预览该站点,但 SQL 连接有问题。

我更改了 SampleData 文件以满足我的需要并替换DropCreateDatabaseIfModelChanges<MyProjectEntities>为,DropCreateDatabaseAlways<MyProjectEntities>因为它没有在我需要时更新示例数据。

当我尝试在数据库中查找某些内容时,我得到了异常Cannot drop the database 'MyDatabase', because it does not exist or you do not have permission。我知道这是因为我根本无法删除数据库,而且我将无法在我的服务器上执行此操作。那么如何告诉 ORM 我不希望它删除数据库来创建表,而是清空或更新现有数据库?

更新:

我下载了 SQL Server Management Studio 并设法将数据从本地数据库获取到在线数据库,但现在我得到了一个不同的错误:Login failed for user '[username]'.

我仔细检查了连接字符串,它是正确的,这是我的 Web.config 中的完整代码片段:

<add name="AdzTowerEntities"
     connectionString="Data Source=xxxxx.db.xxxxxxx.hostedresource.com; Initial Catalog=xxxxxroot; User ID=xxxxxroot; Password=xxxxxpassword;"
     providerName="System.Data.SqlClient"/>
4

1 回答 1

0

使用MigrateDatabaseToLatestVersion怎么样?

如果您无法使用代码优先迁移,则可以创建一个自定义 IDatabaseInitializer,它将执行带来更改所需的 SQL:

 public class AlwaysSeedInitializer : IDatabaseInitializer<MyProjectEntities>
      {
         public void InitializeDatabase( MyProjectEntities context )
             {
                if( context.Database.Exists() )
                {
                   if( !context.Database.CompatibleWithModel( true ) )
                   {
                      context.Database.SqlCommand("Add SQL commands here");
                   }
                }

                if ( /* Insert test to see if database is already seeded */ )
                {
                   //Seed here if the db is not seeded 
                }
             }
      }

并将其放入 global.asax 的 Application_Start() 中:

 Database.SetInitializer(new AlwaysSeedInitializer());
于 2012-08-04T14:48:56.013 回答