如何在不丢弃ASP.NET MVC3的ORM中的整个数据库的情况下插入样本数据?

时间:2012-08-04 12:30:31

标签: asp.net asp.net-mvc-3 sql-server-2008 orm

我正在使用ASP.NET MVC3中的一个网站,并按照MVC音乐商店教程进行操作,但是根据我的需要编辑内容。我现在正试图在我的测试部署服务器上预览该站点,但是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"/>

1 个答案:

答案 0 :(得分: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());