gpt4 book ai didi

fluent-migrator - 在 Execute.WithConnection 操作中调用 FluentMigrator 方法

转载 作者:行者123 更新时间:2023-12-04 12:33:33 24 4
gpt4 key购买 nike

在传递给 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() {}
}

调用 Inser.IntoTable 的行导致从 FluentMigrator\Builders\Insert\InsertExpressionRoot.cs 的第 36 行引发空异常。 - 似乎 _context 变量此时可能为空,但我不明白为什么会这样。 (当测试 Create.Table 时,例如,它发生在 FluentMigrator\Builders\Create\CreateExpressionRoot.cs 的第 49 行)

任何帮助,将不胜感激。也许在迁移中 DML 是否合适存在分歧,我愿意接受建议,但仅本周就出现了两次这种情况。现在,我只是在操作中使用我的微 ORM 而不是 FluentMigrator 来执行插入,这确实有效,但似乎我想要做的应该有效。

最佳答案

使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com