【问题标题】:How to insert sample data without dropping the entire database in ASP.NET MVC3's ORM?如何在 ASP.NET MVC3 的 ORM 中插入示例数据而不删除整个数据库?
【发布时间】:2012-08-04 12:30:30
【问题描述】:

我正在使用 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 中完整的 sn-p 代码:

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

【问题讨论】:

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


    【解决方案1】:

    使用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());
    

    【讨论】:

    • 问题不是我不想让它掉,问题是我不能让它掉。我使用的 MSSQL 服务器强制我使用在线界面来创建和删除数据库,并且不允许使用它创建的 MSSQL 帐户来删除或创建数据库。
    • 抱歉,我误解了你的问题。我已经更新了我的回复,这有帮助吗?
    • 该课程似乎不可用。
    • 你能用code first migrations和实体框架4.3吗?
    • 我想我自己误解了问题出在哪里,我使用本地的SQL Server Compact Edition进行开发,我想我可以通过简单地将数据从本地数据库移动到生产服务器。但是,我终其一生都无法弄清楚我将如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2021-03-20
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多