- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在传递给 Execute.WithConnection
的操作中调用 FluentMigrator 的构建器方法导致抛出空引用异常。
我想要做的是选择一些数据,以便我可以在 c# 中操作它,因为这比在 T-SQL 中操作它更容易,并使用我的 c# 操作的结果来更新数据或插入新数据(要更具体地说,我需要从存储的 url 字符串中选择一个查询字符串参数并将其插入其他地方)。
我看到在迁移中选择数据的唯一方法是使用 Execute.WithConnection
并自己检索数据(FluentMigrator 不提供用于选择数据的帮助程序),但是如果我尝试在传递给 Execute.WithConnection
的操作中使用任何流畅的迁移器表达式抛出空引用异常。
这是我的代码的简化版本:
[Migration(1)]
public class MyMigration : Migration
{
public void Up()
{
Execute.WithConnection(CustomDml);
}
public void CustomDml(IDbConnection conn, IDbTransaction tran)
{
var db = new NPoco.Database(conn).SetTransaction(tran); // NPoco is a micro-ORM, a fork of PetaPoco
var records = db.Fetch<Record>("-- some sql"); // this is immediately evaluated, no reader is left open
foreach (var r in records) {
var newValue = Manipulate(r.OriginalValue);
Insert.IntoTable("NewRecords").Row(new { OriginalValueId = r.Id, NewValue = newValue }); // <-- this line causes the exception
}
}
public void Down() {}
}
FluentMigrator\Builders\Insert\InsertExpressionRoot.cs
的第 36 行引发空异常。 - 似乎 _context 变量此时可能为空,但我不明白为什么会这样。 (当测试 Create.Table 时,例如,它发生在
FluentMigrator\Builders\Create\CreateExpressionRoot.cs
的第 49 行)
最佳答案
使用 Execute.WithConnection 表达式时,您得到的只是数据库连接和事务。
使用 Execute.WithConnection 创建一个 PerformDBOperationExpression表达。处理表达式时,处理器调用 Operation 属性 ( an example in the SqlServerProcessor ),并且处理器没有对 MigrationContext 的引用。但即使它确实可以访问 MigrationContext,当 FluentMigrator 已经进入处理阶段时,也已经太晚了。您将尝试在表达式中处理表达式,而目前 FluentMigrator 并未构建为处理这种类型的嵌套。
另一种方法是使连接字符串在迁移上下文中可用,请参阅此问题:https://github.com/schambers/fluentmigrator/issues/240
那会是更好的方法吗?
关于fluent-migrator - 在 Execute.WithConnection 操作中调用 FluentMigrator 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366162/
我正在使用FluentMigrator将一个数据库架构迁移到另一个数据库架构。我有一种情况,我想在删除外键之前先检查它是否存在。 以前,我只是通过执行以下操作删除外键: Delete.ForeignK
FluentMigrator 如何知道启动应用程序时要执行/迁移哪些迁移? 示例:我已经执行了两次迁移(1 和 2)。现在,我创建第三个迁移并为其指定 id 3。当我启动应用程序时,FluentMig
我正在更新列的值并尝试使用以下代码: Update.Table("Table1").Set(new { Column1 = Column1 + 123 }); 但是出现错误'Column1' does
是否有任何代码生成模板可用于 FluentMigrator 从 SQL (T-SQL) 语句生成迁移类? 理想情况下,我希望获取包含用于创建表、索引等的语句的文本,并使用包含与原始 SQL 语句等效的
我正在尝试将默认值设置为另一列的当前值。有没有办法用 FluentMigrator 轻松做到这一点? public override void Up() { Alter.Table(NomTa
我创建了一个新的公共(public)类 M203_InsertPercent,它将根据 SQL 语句将数据插入数据库。当我使用连接字符串运行 Migrate.exe 时,程序集 FluentMigra
我继承了一个使用 FluentMigrator 管理迁移的项目。最初,该项目在应用程序启动时正在执行迁移,但 I.T.已经对此进行了打击,我们现在必须向 DBA 提供脚本以进行我们所有的数据库更改。
有人可以解释移民(特别是流移民)的概念吗? 我已经收集了关于这个主题的(可能是混淆的)事实: 它是最初创建然后维护数据库更新的方法吗 通过版本控制。 的首次迁移(或 数据库)将包含所有表,关系和属性
给定以下迁移: [Migration(1)] public class Mig001 : Migration { public override void Up() {
何时以及为何使用 FluentMigrator作为 Entity Framework Code-First Migration做同样的工作。 两者看起来非常相似,当 EF 已经提供类来操作数据库架构时
因此,我有一个 Web 应用程序,打算上传到 Azure 网站,并且我有使用 NH 的 Project.Model.csproj 和使用 FluentMigrator 的 Project.Model.
是否可以创建 filtered index使用 FluentMigrator?场景是我想在可能包含 NULL 的列上创建唯一索引,因此过滤器应排除索引列中包含 NULL 的行。 我已经修改了由 Flu
我正在寻找一个可与使用 .NetTiers 的现有项目配合使用的迁移框架,.NetTiers 是一种较旧的 ORM,需要 CodeSmith 生成数据访问代码。 我们有一些roundhouse的经验,
是否可以使用 FluentMigrator 创建触发器,而不使用原始 SQL? 我已经查看了当前在 Nuget (FluentMigrator.1.0.1.0) 上发布的版本的对象模型,但看不到这样做
在 FluentMigrator 中覆盖默认迁移约定的合适位置在哪里?应该与运行者一起完成,还是在迁移中完成?还是别处? 具体来说,我想更改索引命名约定以匹配 ServiceStack 使用的命名约定
假设我在同一个数据库中有两个独立的表,表 Book 和 Cup。我只使用称为 Id 的主键 (int) 创建两者。然后,为了保持整洁,我将它们分成不同的项目并为两者创建 FluentMigration
我们正在开发一个使用 Entity Framework 4(代码优先)和 Fluent Migrator 的项目。 在整个项目中,我们为所有架构更改创建了迁移,为我们希望在各种环境中填充的测试数据创建
在迁移过程中,我如何插入到我的表中,然后检索 ID,然后使用它在另一个表中插入相关数据。 我现在拥有的是一个很难插入的 ID,但我不知道运行迁移时它会是什么。 var contactId = 2; v
我正在寻找一种在创建表之前为流畅的迁移器检查编写扩展方法的方法,就像这样 Schema.TableIfNotExist("table").InSchema("dbo").WithColumn("Id"
目前,当我将 FluentMigrator.Runner nuget 包添加到 c# 项目时,它会自动安装所有其他相关的 nuget 包:FluentMigrator.Runner.Db2、Fluen
我是一名优秀的程序员,十分优秀!