Gọi các phương thức xây dựng của FluentMigrator trong khi bên trong hành động mà tôi chuyển đến Execute.WithConnection
gây ra một ngoại lệ tham chiếu null.Gọi các phương thức FluentMigrator bên trong Execute.WithConnection action
Điều tôi đang cố làm là chọn một số dữ liệu để tôi có thể thao tác trong C#, điều đó dễ dàng hơn thao tác trong T-SQL và sử dụng kết quả của các hoạt động C# của tôi để cập nhật dữ liệu hoặc chèn mới dữ liệu (cụ thể hơn, tôi cần phải chọn một tham số chuỗi truy vấn trong chuỗi url được lưu trữ và chèn nó vào một nơi khác).
Cách duy nhất tôi thấy để chọn dữ liệu trong di chuyển là sử dụng Execute.WithConnection
và tự truy xuất dữ liệu (FluentMigrator không cung cấp trợ giúp cho việc chọn dữ liệu), nhưng nếu tôi cố gắng sử dụng bất kỳ biểu thức di chuyển thông thạo nào trong hành động tôi chuyển đến Execute.WithConnection
ngoại lệ tham chiếu null bị ném.
Đây là một phiên bản luộc xuống mã của tôi:
[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() {}
}
Dòng mà các cuộc gọi Inser.IntoTable gây ra một ngoại lệ null để được ném từ dòng 36 của FluentMigrator\Builders\Insert\InsertExpressionRoot.cs
- dường như biến _context thể được null tại thời điểm này nhưng tôi không hiểu tại sao lại như vậy. (khi thử nghiệm Create.Table, ví dụ: nó xảy ra trên dòng 49 của FluentMigrator\Builders\Create\CreateExpressionRoot.cs
)
Bất kỳ trợ giúp nào sẽ được đánh giá cao. Có lẽ có sự không đồng ý về việc liệu DML có thích hợp trong việc di cư hay không, và tôi mở cửa cho các đề xuất, nhưng kịch bản này đã tăng lên hai lần trong tuần này một mình. Bây giờ tôi chỉ đơn giản là thực hiện chèn bằng cách sử dụng vi-ORM của tôi trong hành động chứ không phải là FluentMigrator và điều đó không hoạt động, nhưng có vẻ như những gì tôi đang cố gắng làm nên hoạt động.
Tôi không nghĩ chuỗi kết nối sẽ tốt hơn, bởi vì sử dụng các tham số được truyền trong Execute.WithConnetion cho phép tôi chạy các hoạt động của mình bên trong cùng một giao dịch. Tôi đã nghĩ rằng đó là một hạn chế của biểu thức hoạt động làm tổ, vì vậy tôi sẽ chỉ đơn giản là gắn bó với việc sử dụng các phương pháp thay thế của dml bên trong WithConnection. Cảm ơn bạn. –
Có, điều đó sẽ hữu ích. Ngay bây giờ, Execute.WithConnection đang thực hiện theo thứ tự với chèn của tôi, và tôi cần phải truy vấn DB cho một số giá trị tra cứu được sử dụng để gieo hạt dữ liệu thử nghiệm. –