- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简单的问题是“如何让我的 Azure 数据库与本地数据库恢复同步?”
详细信息:我一直在我的项目中使用 Entity Framework ,这与内置了 Identity 2 的 ASP.NET MVC 5 示例项目没有太大区别。
有两个数据库上下文,一个名为 ApplicationDbContext (aspnet_somethingUserDB),来自 Identity,另一个名为 StoreInitialTestContext (store_db),来 self 的更改。
有趣的是,我将这些上下文中的每一个都存储在本地的单独 SQL 数据库中,并且它们仅位于 Azure 服务上名为 store_db 的单个数据库中。
一切进展顺利,两个本地数据库(它们与 Azure 上的单个数据库具有相同的表补充)保持同步。该网站在本地调试和 Azure 上运行良好。
通过添加模型对架构进行最后一次更改后,我执行了 update-database 命令并更新了本地数据库。不幸的是,当我将网站发布到 Azure 时,选择上下文并选中“运行代码优先迁移...”后,Azure 数据库没有更新。
查看我的代码,我没有看到任何待处理的迁移,因此我不确定如何使 Azure 数据库恢复同步。
作为最后的努力,我将 Azure 数据库从基本设置为标准,并在本地 store_db 和 Azure store_db 之间使用比较架构命令。我通过取消选中与 aspnet_UsersomethingDb 相关的表来确保仅更新本地 store_db 中的表。
该操作未成功,因此我尝试撤消对本地的更改,这些更改是有问题的,但未在 Azure 上应用。
这也没有成功,所以我调整了我的网站以避免 EntityFramework“模型与数据库差异”崩溃,这样它至少会跛行。
此时,我的本地数据库一切正常,但关闭“代码优先迁移”复选框后,Azure 数据库会报告:
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but wasnot handled in user code
Additional information: The model backing the 'StoreInitialTestContext' context has changed sincethe database was created. Consider using Code First Migrations to update the database(http://go.microsoft.com/fwlink/?LinkId=238269).
打开复选框,报告为:
An exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.dll but wasnot handled in user code
Additional information: There is already an object named 'ExtendedUserInformations' in thedatabase.
这似乎表明代码优先迁移想要添加对象以使事物同步,但该对象已经存在。
是否有一种快速方法可以使这些数据库同步? Azure 中没有那么多数据,因此如果有必要,我可以导出一些记录并在重新创建数据库后重新加载它们。
您是否建议使用更新数据库并指定 Azure 连接字符串?
最佳答案
我最终在这里所做的可能不是最简单的方法,但它可能会对某人有所帮助。
<小时/>首先,虽然他提出的建议很有趣,但在我的情况下不起作用,大声喊 http://robertgreiner.com/2012/05/using-entity-framework-database-migrations-to-update-a-remote-database/ 。我应该意识到这一点,但是 update-database
也可以使用 Azure 连接字符串在 Azure 数据库上运行命令。
确保将数据库扩展到“标准”层或更高,以避免命令超时和不稳定的操作。“基本”和“网络”并不意味着任何“有用”。请注意,您可以更改下面的层根据需要随时“扩展”数据库的 Azure 设置。
可以通过从发布设置中复制粘贴来获取 Azure 连接字符串(右键单击您的项目,选择“发布”,然后选择“设置”),所需的 -ConnectionProviderName 为 System.Data.Sqlclient
,所以命令如下所示:
<小时/>update-database -ConnectionString "Data Source=tcp:'your-sql-server'.database.windows.net,1433;Initial Catalog='your-db-name'; User ID=user@'your-sql-server';Password='sql-server-pwd'
具有两个数据库上下文(ApplicationDbContext 和我的 StoreInitialTestContext)的示例项目大大增加了复杂性。事实上,每个上下文在本地都有一个数据库,但 Azure 上只有一个数据库,这使得使用 DropCreateDatabaseAlways
变得困难。或DropCreateDatabaseIfModelChanges
初始化器。
我最终编写了最大数据库表的内容的脚本,以便以后可以恢复它们。
接下来,我删除了整个 Migrations 目录,这实际上禁用了迁移(正如此处所指出的,没有 disable-migrations
包管理器命令)。
接下来,我为 StoreInitialTestContext
设置数据库初始值设定项,像这样:
public class StoreInitialTestContextInitializerCreate: DropCreateDatabaseAlways < StoreInitialTestContext >
{
protected override void Seed(StoreInitialTestContext context)
{
// nothing for now
}
}
此外,将其注册为适当上下文的数据库初始值设定项:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// Drop the StoreInitialContext database and recreate if the model changes
Database.SetInitializer<StoreInitialTestContext>( new StoreInitialTestContextInitializerCreate());
我用它来重新创建包含 StoreInitialTestContext
的数据库下次运行网站时。
本地数据库完全清理干净后,我就迁移到 Azure。
我转到门户并删除了数据库,以便下次我的网站在 Azure 上运行时可以重新创建它。
我确保发布配置文件中的设置已设置为更新数据库,但注意到代码优先迁移选项不可用。
下次在 Azure 上运行网站时, Entity Framework 没有看到数据库,因此已创建数据库。
我确保通过列出项目来锻炼我自己的上下文,并通过注册为用户来锻炼 aspnet 身份部分。检查 Visual Studio 中的 SQL Server 对象资源管理器确认所有表均已创建。
接下来,是时候从表中恢复数据了,但首先为了避免 Azure 错误,我将新创建的数据库(已创建为“已失效”的“Web”数据库层)设置为“标准”层。
然后,我将脚本一一加载到 Visual Studio 中,在对话框中输入连接字符串用户和密码,然后运行脚本。
只有几张表需要更新,一切都很顺利,然后我就准备好迎接下一个挑战了。
关于asp.net-mvc - 丢失的迁移和 Azure 数据库现在不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853543/
我在 Ubuntu 10.04 LTS 上运行 Eclipse Galileo。今天 Ubuntu 在我身上崩溃了,重新启动后,我发现 Eclipse 已经完全失去了 Java Perspective
我使用配置了 sonata_user 的 SonataAdminBundle在 config.yml : sonata_user: impersonating: route:
我有 ubuntu 14.04 但它不见了 docker exec sudo docker exec -it ubuntu_bash bash 我希望在现有正在运行的 docker 容器中运行交互式
我正在使用 Ubuntu 8.04/32 位(作为虚拟机)。在一个不是 min 的项目上执行一些 make 时,我得到了错误: g++:/usr/lib/libstdc++.a: 没有这样的文件或目录
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我正在尝试获取有关我在 UIImagePicker 中选择的视频的一些数据。 因此,当它进入 UIImagePicker 委托(delegate)方法(如下)时,我知道我需要使用信息字典中的 UIIm
我的网站最近被可能的黑客行为删除了。我上传了备份的文件夹和数据库,但现在我的 View 没有显示。其他一切都有效。我想不出有什么变化,只是上传了几天前的备份。 这些字段在 admin/build/vi
我执行以下操作来设置我的 session ,这是有效的,因为 echo 出现了。但是当我转到下一页或另一页时, session 不存在吗?我做错了什么? $session_start(); if ($
我试图在 BigQuery 中使用这段代码,显然是从 GA 中获取数据,但 _TABLE_SUFFIX 似乎有问题。错误显示“错误:无法识别的名称:_TABLE_SUFFIX at [12:3]”您能
输入:8(2 5 6 9 10 2 7 4)预期输出:(2 7 9 9 12 5 7 6)实际输出:(2 7 9 9) 这是我的大学作业,也是我第一次在这里提问。我不知道为什么,但 10 没有扫描,有
$('div'); // 我在上面的代码中遇到错误。在检查 .js 代码时,我找不到名为 $ 的函数,但根据文档,应该有一个。 最佳答案 试试 http://ajax.googleapis.co
以下简单代码的输出对我来说有点奇怪。它错过了在控制台上打印的 0 到 100 之间的一些数字。 谁能解释一下为什么省略打印?我对并发编程完全陌生。 import java.util.concurren
我正在学习 xamarin 以构建移动应用程序,但我对 Xamarin 和移动应用程序一无所知。我打开了一个空白的移动应用程序,其中有“Hello world”示例并编辑了一些文本,但我的应用程序图标
我正在将一些值存储到 sqlite 数据库中。因此,数据是作为字符串从文本字段收集的,然后转换为 double 并持久化。 这是我试过的 NSDecimalNumber 答案; value.answe
我有一个奇怪的案例。突然,其中一个表中的一些记录(这么多记录)丢失了。首先,我认为这是由我的 PHP 脚本中的错误引起的。但是,我检查了一下,我的脚本中没有DELETE操作,只有UPDATE。有谁知道
我正在复制 NSString来自 NSDictionary进入本地NSString使用 [[NSString alloc] initWithString:] ,对其进行处理(删除一些字符),然后将其发
当保存在根文件夹中时,我的非常基本的 html 页面保持样式。为一个组创建了一个新文件夹,但是当我将页面移动到该文件夹时,它们似乎失去了与 css 文件的连接。 认为问题可能出在链接上,因为它现在
我需要使用 OpenCV 训练一些图像。但问题是,我找不到 opencv_createsamples 程序。我以正常方式安装了 OpenCV,因为我使用的是 Windows 7。这个 opencv_c
我有一个绑定(bind)到 JTable 的 ArrayList。之后 bindingGroup.unbind(); bindingGroup.bind(); (完成刷新数据)我丢失了表格单元格渲
所以基本上我们只是丢失了一个 keystore 和备份 keystore 。但是我们可能知道原始 keystore 的密码。 我的问题是,如果我们知道原始 keystore 的密码,我们可以重新生成
我是一名优秀的程序员,十分优秀!