问题标签 [entity-framework-migrations]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
entity-framework - 如何使用实体框架迁移在我的用户表中创建用户帐户?
以前,在使用 Code First 创建表时,我使用数据库初始化程序来播种或预填充我的表。这一切都很好,但我想继续使用 EF 4.3 迁移。
我在我的项目中更新到 EF 4.3 并删除了数据库初始化程序代码并将其放在迁移 Configuration.cs 文件的 Seed 方法中。除了我想将默认用户播种到我的用户表中之外,这对我来说一切正常,可以预先填充我的表。
我在我的 Seed 方法中使用以下代码:(目前这不使用 AddOrUpdate 代码,因为我不确定如何在这种情况下使用它 - 因此检查用户名)
当我尝试运行 Update-Database 时,出现此错误:
我认为这取决于我如何调用 CreateUser 但我似乎无法解决如何解决这个错误。我试过只为安全问题和答案输入空值,但这似乎不起作用。
有没有人使用“AddOrUpdate”选项播种用户的例子?
编辑1:
根据以下评论之一,我正在使用 Altairis Security Toolkit 来管理我的会员资格。我的 web.config 设置如下:
编辑2:
我也在 Altairis 论坛上将此作为公开票。 http://altairiswebsecurity.codeplex.com/workitem/32273
编辑 3:
为了让这个工作没有任何错误,我必须按如下方式设置我的代码:
运行 Update-Database 但没有生成新用户时,以上内容现在将编译。如果有人有建议尝试,那就太好了!
谢谢,
富有的
entity-framework - 使用 Entity Framework Migrations 4.3 时如何显式命名数据库
我最近开始使用 Entity Framework 迁移,并注意到当我运行Update-Database
命令时,数据库名称并没有为我所用。
我的连接字符串是:
我第一次运行Update-Database时,我的数据库是用正确的名称TestDB创建的。但是,一旦我对我的一个实体进行了更改,除非我添加启动项目名称(我正在使用多项目解决方案),否则它将不再为我更新:
然后,这将创建另一个新数据库,迁移将始终继续使用该数据库。我不介意必须输入StartUpProjectName命令,但是有没有办法覆盖它生成的数据库的默认名称?它始终将数据库创建为
有没有办法确保在传递 StartUpProject 名称时创建的数据库只是称为TestDB或者这是使用 StartUpProjectName 设置的限制?
作为说明,我认为我需要指定 StartUpProjectName 的原因是我有一个多层项目设置。迁移配置文件在我的“数据”项目中,实体/模型在我的“域”项目中,等等。我的 Global.asax.cs 文件中目前也没有任何初始化选项,就像我之前使用的那样代码优先 ef 4.2。因此,在我的项目中,我的数据项目中只有一个 DataContext,该项目中也有迁移配置。
编辑:
由于我最初设置了这个问题,我偶然发现了在多项目解决方案中命名数据库的“正确”方法。虽然下面的答案会起作用,但这确实意味着您正在将 web.config 复制到另一个不是理想解决方案的区域。相反,您可以通过执行以下操作将名称放入您的 DbContext 中(DataContext 只是我在项目中使用的名称):
谢谢,
富有的
entity-framework - 在 Entity Framework 4.3 中增量播种数据的最佳方法
我一直在现有数据库上使用 Entity Framework 4.3,并且我有几个我试图迎合的场景。
首先,如果我删除我的数据库,我希望 EF 从头开始重新创建 - 我已成功为此使用了 CreateDatabaseIfNotExists 数据库初始化程序。
其次,如果我更新我的模型并且数据库已经存在,我希望数据库能够自动更新——我已经成功地为此使用了 Entity Framework 4.3 Migrations。
所以这是我的问题。假设我向我的模型添加了一个新表,它需要一些参考数据,这是确保在数据库初始化程序运行和迁移运行时创建这些数据的最佳方法。我的愿望是,当我从头开始创建数据库以及由于迁移运行而更新数据库时,数据会被创建。
在一些 EF 迁移示例中,我看到人们在迁移的 UP 方法中使用 SQL() 函数来创建种子数据,但如果可能的话,我宁愿使用上下文来创建种子数据(如您在大多数数据库初始化程序示例中所见)因为当 EF 的整个想法将其抽象出来时,您会使用纯 sql,这对我来说似乎很奇怪。我尝试在 UP 方法中使用上下文,但由于某种原因,当我尝试将种子数据直接添加到创建表的调用下方时,它认为不存在迁移中创建的表。
任何智慧都非常感谢。
entity-framework-4 - 在生产中使用 EF 迁移(或任何自动迁移框架)有什么危险?
我正在考虑在生产站点中使用 Entity Framework 4.3 迁移。以下是我的担忧:
如果迁移由于某种原因而失败,我希望所有语句都回滚并将站点置于关闭状态,以便在我尝试解决问题时没有用户可以使用该站点。唯一的事情是我不能回退到手动对数据库执行脚本,因为迁移文件是在程序集中编译的。我可以分别跟踪迁移文件和 sql 脚本文件,但那时为什么要使用迁移。
在工作中,脚本文件存储在站点上的 SQL 文件夹(任何人都无法浏览)中。以前运行的脚本文件在数据库中注册。当新的脚本文件出现在文件夹中(并且不在数据库中)时,如果用户是管理员,他们将被重定向到数据库门户,否则会获得站点关闭以进行维护。如果我们尝试从门户执行任何脚本但失败,我们会抓取新脚本并尝试在 express Studio 内手动运行它们。这已经工作了十多年。我只是在探索迁移,看看是否有更好的方法出现。感觉不像。请让我知道是否有更好的方法,如果不是迁移,那是什么。
entity-framework - 实体框架迁移:转换十进制?使用 null 的默认值转换为十进制
SqlCeException ... The column cannot contain null values. [ Column name = Subtotal
当我运行以下实体框架迁移时,我得到了。
这是设置默认值的正确方法吗?这似乎太容易了:)
在看到关于 ruby on rails的类似问题后,我尝试了这个。
entity-framework - EF Code First 4.3 DbContext 生命周期?
我已经搜索过,但没有找到关于这个主题的太多内容。有没有人看到 DBContext 的简洁“操作顺序”,包括实例化、验证、保存等内容?我主要是好奇,因为在我的 EF 4.3 Code First 上下文中使用 LINQPad 时,它在我自己的任何查询之前运行两个查询。一个与我理解的迁移历史有关,因为我们正在使用 EF Migrations 并且它试图查看它是否需要自动更新,另一个是我不理解的 EdmMetadata 表,因为它听起来像如果我们使用 EFMigrations,则不需要。
我对为什么调用一个查询缺乏了解,这让我想知道 DBContext 生命周期的其他部分是否有我不知道的可能有助于理解/覆盖。提前致谢!
database-migration - 设计完整的数据库迁移堆栈
在开发过程中,我喜欢像 Entity Framework 4.3 Migrations 这样的框架的想法(尽管我需要它来处理 sql 脚本而不是 Migration 类)使所有开发人员数据库保持最新。有人进行更新以获取最新源,他们尝试运行应用程序并收到错误,他们需要将数据库更新到最新迁移(或让迁移自动发生)。迁移文件带有时间戳,因此开发人员不必担心将两个文件命名为相同或文件需要执行的顺序。
当我准备构建 WebDeploy 部署包时,我希望该包包含将生产数据库移动到最新数据库版本所需的脚本。所以不知何故,MSBuild 或 WebDeploy 需要决定必须打包哪些脚本。对于部署,我不希望应用程序尝试像 EF 提供的那样更新自身。我想要么将包交给 IT 部门,要么通过部署服务器进行自动部署。
我的一些问题是:
EF 4.3 是否可以使用 sql 脚本而不是 DBMigration 类来满足我的开发需求(我已经将它用于我的 ORM,所以如果可以的话会很好)?
MSBuild 或 WebDeploy 是否理解数据库迁移的概念(例如,它是否识别 EF.4.3 migrationHistory 表)或者我是否必须确保只提供它需要运行的脚本,以便将我的 prod db 带到最新的迁移?手动决定应该打包哪些脚本不是我想做的事情,是否有理解迁移的 MS WebDeploy 扩展?
我的担忧和想法有效吗?我只是在研究这个东西,所以我真的不知道。
ef-code-first - 使用连接字符串进行代码优先迁移
所以我设法让 Code First 运行起来,而且效果很好。
由于我仍在开发应用程序,因此数据库的结构尚未最终确定,因此我需要实现迁移。
我关注了官方博客文章并让 Update-Database 命令正常工作。
但是,这只会更新数据库的 SQLExpress 版本。数据库的生产版本位于 Azure 上,我在运行时指定了连接字符串,因此 Update-Database 命令对此不起作用。
所以我的最后一个问题是:如何将自动迁移应用到在运行时指定连接字符串的生产数据库?
c# - -TargetDatabase 标志是否已在 EF 4.3 迁移中重命名?
到目前为止,我一直在使用 Code-First Migrations Beta,当通过包管理器控制台迁移我的数据库时,我能够指定-TargetDatabase
, 来指示我希望迁移应用到哪个数据库,如下所示:
由于迁移现在包含在 Entity Framework 4.3 中,我更新了我的应用程序以使用 EF 4.3,但现在我不能再设置-TargetDatabase
标志了。在包管理器控制台中运行时,出现以下错误:
我通读了有关 EF 4.3 中迁移的博客文章,但找不到任何有关它的信息。我还注意到对一个旧的 SO 问题的评论说该标志应该是-Target
而不是-TargetDatabase
,但这似乎也不起作用。该-Target
标志似乎用于指定我要迁移到的迁移。
标志是否-TargetDatabase
已重命名,或者如何指定要将迁移应用到哪个数据库?
sql-server - Entity Framework 4.3 多应用数据库迁移策略
我一直在开发一个 ASP.NET Entity Framework 4.3 Code-First 应用程序,该应用程序管理它关心的数据库部分的模型。由于该数据库将被多个其他应用程序使用(有些不使用 ef 因此无法导入模型),因此想法是使用我的应用程序创建基本数据库。在此之后,DBA 可以根据需要添加我的应用程序未使用的其他字段和表。
在我的应用程序中对模型进行更改时会出现问题。我们的想法是使用 EF 4.3 的新迁移功能来创建脚本(-script 功能),同时指向我们的本地机器开发数据库(SQLCompact),然后将其传递给 DBA 以迁移实际的开发数据库(MS SQL 2008 ) 所有其他应用程序都使用。
但是,这一直在引起问题,因为当我开始测试(指向 SQL 服务器)时,应用程序无法读取任何外键关系,从而给出这些列不存在的错误。我想知道这是否是由 SQL Compact 和 SQL Server(EF 到 SQL)的翻译差异引起的,或者是其他一些问题。
对于这种类型的 1-DB 多应用程序环境,我是否应该为 EF 迁移而烦恼?我是否需要直接针对 SQL Server 运行所有迁移?我应该使用完全不同的变更策略吗?任何帮助或指导将不胜感激。