问题标签 [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.

0 投票
2 回答
987 浏览

code-first - 如何让 Entity Framework 4.3 Code First 使用 Table Per Type (TPT) 映射子类?

我正在使用 EF 4.3 Code First 和自动迁移。我有以下 3 个课程:

当我对此运行 update-database 时,它​​使用 TPH (Table-Per-Hierarchy) 为所有 3 个表创建一个表,将所有这些属性合并在一起并添加一个鉴别器列。

我如何确保我最终得到 3 张桌子?

0 投票
2 回答
3492 浏览

entity-framework - EF(实体框架)4.3 迁移工具不适用于 EF 4.1 DB

我想修改一个使用 EF 4.1(代码优先)开发的数据库。我将项目升级到 EF 4.3 并按照以下步骤操作:http: //blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx

一切进展顺利,但是当我想在当前数据库(EF 4.1 Code First)上进行测试时,Update-Database 会引发此错误:

无法构建下一次迁移,因为目标数据库是使用早于 EF 4.3 的 Code First 版本创建的,并且不包含迁移历史记录表。要开始对该数据库使用迁移,请确保当前模型与目标数据库兼容并执行迁移更新过程。(在 Visual Studio 中,您可以使用包管理器控制台中的 Update-Database 命令来执行迁移更新过程)。

我想知道如何迁移 EF 4.1(代码优先)数据库?此外,数据库是实时的并且有数据,我不能删除表。

0 投票
2 回答
25329 浏览

c# - 无法在类库中为实体框架启用迁移

我刚刚加入 EF 5 并正在使用他们的代码优先迁移工具,但是当我尝试启用迁移时似乎遇到了错误。

我输入Enable-Migrations包管理器控制台,然后它说

在当前项目中找不到派生自 DbContext 的类。
编辑生成的配置类以指定启用迁移的上下文。
为项目 MyApp.MvcUI 启用了 Code First 迁移。

然后它会在我的 MvcUI 项目中创建一个 Migrations 文件夹和一个配置类。问题是,我的 DbContext 位于一个名为 MyApp.Domain 的类库项目中。它应该在该项目中完成所有这些工作,并且找到我的 DbContext 应该没有问题。

0 投票
2 回答
3121 浏览

c# - 是否可以将种子数据放在 EF 代码优先的 OnModelCreating 方法中?

我知道如何使用 EF 4.3 中的迁移 API 来处理种子数据。我整晚都在玩那个。但是,我的最终目标是让我的项目达到用户可以从源代码控制中拉出它并按 F5 的程度,然后它们就可以开始了,数据库,种子数据等等。

目前,代码优先在新版本上构建数据库方面做得很好,但是直到我在包管理器控制台中执行 Update-Database 后才会插入种子数据。那时它运行种子方法并插入我的种子数据。

  1. 在 OnModelCreating 方法中这样做可以吗?
  2. 我还能在这里利用 AddOrUpdate 扩展方法吗?
  3. 每次按 F5 时都会运行此种子数据吗?如果是这样,我可以检测数据库是否已经创建,并且只在初始数据库创建时添加这个种子数据?
0 投票
1 回答
2291 浏览

asp.net-mvc-3 - 管理开发和生产之间的 EF Code First 迁移

非常简短:

我正在根据Ladislav Mrnka的文章在现有项目上实施 EF 迁移,该项目以 Code First 的形式构建

在已投入生产的项目上实施 EF 迁移时,如何在应用于开发的更新和为生产生成的脚本之间管理迁移脚本?

我感到困惑的原因是为每个脚本生成的 MigrationId 都附加了一个时间戳。在我的迁移尝试中,我注意到在 dev 和 prod 上的 __MigrationHistory 表中记录的条目是不同的,因此提出了一个问题,如果数据库要经历相当多的迁移升级,那么是否出于任何原因需要降级,很难将确切的 MigrationId 关联起来以使用创建脚本update-database -script


非常直接的过程,您可以在其中创建$InitialMigration创建表的__MigrationHistory表。然后对您的 Model 进行任何更改以update-database获取数据库Migrated。每当您有一批按逻辑分组的模型更改时,此过程就会循环。

__MigrationHistory表显示

0 投票
7 回答
26232 浏览

c# - 实体框架代码优先迁移的例外情况

在使用 Entity Framework 4.3 的代码优先迁移时,我遇到了几个未处理的异常。

数据库上下文:

实体:

数据库初始化器:

我使用以下方法将 Entity Framework 4.3 安装到我的 DAL 项目和 MVC 项目中:

安装包EntityFramework

我已将 MVC 项目设置为启动项目,并使用数据库上下文和初始化程序对 DAL 项目执行以下命令:

PM> 启用-迁移-详细

使用 NuGet 项目“Ckms.KeyManagement.Managers”。搜索上下文类型时出错(指定 -Verbose 以查看异常详细信息)。System.Data.Entity.Migrations.Design.ToolingException:无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。在 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner) 在 System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypes()
在 System.Data.Entity.Migrations.MigrationsCommands.FindContextToEnable() 编辑生成的配置类来指定启用迁移的上下文。为项目 Ckms.KeyManagement.Managers 启用了 Code First 迁移。

DbMigrationsConfiguration 子类被添加到 DAL 项目中。如果我手动添加 DbContext 的类型并启用自动迁移:

Add-Migration 和 Update-Database 命令会引发以下异常:

PM> 添加迁移测试EFMigrationsColumn -Verbose

使用 NuGet 项目“Ckms.KeyManagement.Managers”。使用启动项目''。System.Reflection.TargetInvocationException:调用的目标已引发异常。---> System.ArgumentException:参数不正确。(来自 HRESULT 的异常:0x80070057(E_INVALIDARG))---内部异常堆栈跟踪结束---在 System.RuntimeType.InvokeDispMethod(字符串名称,BindingFlags 调用Attr,对象目标,对象 [] 参数,布尔 [] byrefModifiers,Int32 文化, String[] namedParameters) 在 System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] 修饰符, CultureInfo 文化, String[] namedParams) 在 System.Management.Automation。 ComMethod.InvokeMethod(PSMethod 方法,

更新数据库:

PM>更新-数据库-详细

使用 NuGet 项目“Ckms.KeyManagement.Managers”。使用启动项目''。System.Reflection.TargetInvocationException:调用的目标已引发异常。---> System.ArgumentException:参数不正确。(来自 HRESULT 的异常:0x80070057(E_INVALIDARG))---内部异常堆栈跟踪结束---在 System.RuntimeType.InvokeDispMethod(字符串名称,BindingFlags 调用Attr,对象目标,对象 [] 参数,布尔 [] byrefModifiers,Int32 文化, String[] namedParameters) 在 System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] 修饰符, CultureInfo 文化, String[] namedParams) 在 System.Management.Automation。 ComMethod.InvokeMethod(PSMethod 方法,

有任何想法吗?错误消息并没有真正的帮助。我已经尝试过使用和不使用现有数据库的 Nuget 命令。

0 投票
3 回答
2024 浏览

.net - 使用 EF 4.3 迁移添加时间戳

我正在使用 Code First 迁移,并且正在更改我的模型以将时间戳字段添加到我的表中。我正在尝试在第二次迁移中添加时间戳字段。这是我的代码的示例

生成的迁移看起来像这样

当我执行 Update-Database 命令时,我收到一条错误消息,提示 “无法在数据类型时间戳的列上创建默认值。表 'Users',列 'TimeStamp'。无法创建约束“我从表,但这并没有解决问题。

如何向此迁移集添加时间戳字段?

0 投票
1 回答
3547 浏览

asp.net-mvc-3 - XXXX 不再使用。现在用于检测模型的变化

在 EF 4.3IncludeMetadataConvention中,EdmMetadata其他类已过时:

XXX 不再使用。EdmMetadata 不包含在模型中。<see cref="EdmModelDiffer" /> 现在用于检测模型中的变化。

它是什么EdmModelDiffer以及应该如何使用?

0 投票
3 回答
1317 浏览

vb.net - 迁移(实体框架 4.3) - 脚本未执行

脚本生成正确,我使用多个层,因此以下命令运行到包管理器控制台

例如。当我将电子邮件列添加到表中时:“所有者”

--> 结果:

我使用的下一个命令是:

--> 结果:

我在 App.Config 中的连接字符串是:

尽管我指定了初始目录,但它的目标目录错误。它创建/更新了名为: FacturatieMVCv2.Data.Website.MyResellerContext 的数据库表。

以下是我的 app.config

简而言之,Update-Database 命令,更新了错误的数据库。

0 投票
3 回答
2884 浏览

entity-framework - 无法在 Entity Framework 4.3 中启用迁移

我有一个带有 EF Code First 的类库。我刚刚升级到 EF 4.3,现在我想启用迁移。

Enable-Migrations -ProjectName MyProjectName在 PM 控制台中输入,但收到以下错误

我不知道哪个字典可能是错误的。

我的连接字符串如下所示:

知道可能出了什么问题吗?

请注意:
我在控制台应用程序中使用我的类库和我的 app.config 的精确副本,在那里我可以很好地访问我的数据库。