Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 首先使用生产数据库部署实体框架代码_C#_Mysql_Sql Server_Database_Entity Framework - Fatal编程技术网

C# 首先使用生产数据库部署实体框架代码

C# 首先使用生产数据库部署实体框架代码,c#,mysql,sql-server,database,entity-framework,C#,Mysql,Sql Server,Database,Entity Framework,我首先使用实体框架代码开发了一个非常简单的web应用程序。经过数小时的挫折之后,我意识到,即使localdb是SQL Server Express,但在使用“发布”(发布向导)时,它实际上并不适用于生产环境。仅供参考,我使用的是EF 6.1.3、SQL Server 2014、VS 2013和IIS 7 如果我理解正确,当您单击publish with localdb时,您真正要做的就是将localdb数据库复制到IIS 7服务器。当我通过VS迁移更新我的lodaldb数据库时,我不明白为什么我

我首先使用实体框架代码开发了一个非常简单的web应用程序。经过数小时的挫折之后,我意识到,即使localdb是SQL Server Express,但在使用“发布”(发布向导)时,它实际上并不适用于生产环境。仅供参考,我使用的是EF 6.1.3、SQL Server 2014、VS 2013和IIS 7

如果我理解正确,当您单击publish with localdb时,您真正要做的就是将localdb数据库复制到IIS 7服务器。当我通过VS迁移更新我的lodaldb数据库时,我不明白为什么我的生产服务器数据库没有被更新。我理解(并且现在相信)它实际上是两个不同的localdb实例,因此不是相同的数据

不管怎样,我已经完成了localdb,并且在我的机器上创建了一个真正的SQL Server 2014 db。我在谷歌上搜索了几个小时,现在不知道该怎么办。我有一些问题:

  • 如何使用EF管理这个新数据库?例如,假设我想添加一个新列。首先,我将它添加到我的localdb中,进行一些测试,并使用AddMigrationBlah进行迁移,然后更新数据库。。。然后我是否必须使用VS生成SQL脚本,然后在生产数据库服务器上手动运行该脚本

  • 我知道这不是很好,但是我可以将EF附加到一个真正的暂存SQL Server数据库(一个测试数据库)并跳过所有这些localdb bull****,而不是使用实体框架的本地DB吗?那么,我是否可以使用代码优先迁移来管理它,并保持一切同步

  • 我应该使用初始值设定项吗?我读过关于是否在生产数据库中使用这些数据库的相互矛盾的报告(如下图所示)

    公共类PricedNotesInitializer:MigratedatabaseTolatesVersion{ }

  • 令人沮丧的是,我了解这些东西的唯一途径就是通过别人的博客帖子。我不明白为什么文件这么垃圾


    感谢您的帮助,对此表示歉意。

    如果您在本地使用
    SQL express
    edition,则可以非常轻松地将其迁移到SQL生产服务器。SQL生产服务器可以是SQL Azure或您自己的生产服务器

    A 1。您只需将
    本地连接字符串
    更改为
    生产连接字符串
    并在
    软件包管理器上运行下面的命令即可。然后,所有未更新的迁移脚本都将在生产环境中运行

    PM> Update-Database
    
    a2:我不推荐这种方法

    a3:您可以这样做:

     Database.SetInitializer(new CreateDatabaseIfNotExists<YourDbContext>());
    
    Database.SetInitializer(新的CreateDatabaseIfNotExists());
    
    您应该有两个连接字符串,一个用于本地数据库,另一个用于生产SQL server

    您应该正常开发,例如为您的localdb使用
    addmigration
    updatedatabase


    然后,当您准备发布到live时,您应该将连接字符串更改为live字符串。发布你的网站。然后运行
    更新数据库
    命令。这将使您的live数据库与您刚刚发布的内容同步。

    谢谢大家的帮助。我是在你们的帮助下弄明白的。对这些步骤感兴趣的人,请看这里。我只想在这里列出一些额外的帮助,但是上面的答案确实回答了这个问题。这假设了我问题中的设置。设置好数据库后,我建议您使用本地数据库进行更新,如下所示:

  • 在VS2013中,转到工具->sql server对象资源管理器->(LocalDb)\v11.0->数据库->[数据库名称]->右键单击->数据比较->架构比较
  • 在右边的下拉列表中,找到您的SQL数据库并测试连接以确保其正常工作

  • 单击比较->更新目标(我不建议生产数据库使用此选项,但如果它是您刚刚创建的暂存数据库,则可以)

  • 如果您转到SSMS(SQLServerManagementStudio),您应该会看到新表以及模式比较工具制作的任何内容。太好了

  • 如果要使用初始值设定项,请继续,只需确保它设置为CreateDatabaseIfNotExists或不会删除数据库的内容。我的意思是,我想你可以使用任何你想要的东西,但这会破坏上述步骤的目的

  • 右键单击您的web项目,单击发布,使用web部署,转到您的数据库,以新数据库为目标,确保选中执行代码优先迁移(这将在新数据库上运行您为localdb所做的所有迁移)。你实际上不必这么做。您也可以不选中此选项,按照Sampath在接受的答案中的建议进行操作

  • 完成了!现在,您已经成功地转换为真正的SQL Server Express DB

  • 要管理数据库,只需按照上面的答案操作即可。或者,再次使用发布向导,确保选中“执行代码优先迁移”并发布

    使用初始值设定项 您可以使用初始值设定项,以便在部署后应用程序首次启动时自动对数据库进行架构更改(如果可能,不会丢失数据)

    如果发生数据丢失,您将得到一个错误,必须采取适当的措施。即使在数据丢失的情况下,也可以覆盖此项以继续

    开发环境设置经验 正如其他答案已经指出的那样,每个环境都需要一个连接字符串,因此LocalDB适合开发,我甚至鼓励使用它,因为它可以创建和初始化(并使用测试数据播种)只需从源代码构建和运行应用程序,即可自动为任何需要开发或调试应用程序的新开发人员提供支持

    除了加载解决方案、构建和运行代码库之外,“设置新的开发环境”的体验应该尽可能流畅,手动步骤应该尽可能少,最好是零