3
我們有一個使用Dapper進行數據庫讀取的winforms應用程序。取消長時間運行的Dapper查詢
在一種形式中,我們在後臺線程上有一個(可能的)長時間運行的查詢。
用戶希望能夠取消查詢,所以我需要訪問DbCommand Dapper創建並在其上從另一個線程調用Cancel(如果它正在運行)。
從Dapper公佈DbCommand的最佳方式是什麼?
我們有一個使用Dapper進行數據庫讀取的winforms應用程序。取消長時間運行的Dapper查詢
在一種形式中,我們在後臺線程上有一個(可能的)長時間運行的查詢。
用戶希望能夠取消查詢,所以我需要訪問DbCommand Dapper創建並在其上從另一個線程調用Cancel(如果它正在運行)。
從Dapper公佈DbCommand的最佳方式是什麼?
這是錘子時間。弄壞東西。
using (var reader = connection.ExecuteReader(query)) {
....現在取消
var wrappedReaderType = typeof (Dapper.CommandDefinition)
.Assembly.GetType("Dapper.WrappedReader");
var field = wrappedReaderType
.GetField("cmd", BindingFlags.NonPublic | BindingFlags.Instance);
if (field != null)
{
var command = field.GetValue(reader) as IDbCommand;
if (command != null)
{
command.Cancel();
}
}
當前不暴露出來,我想不出它添加任何*易*方式的短傳在通告的接口,一個事件...我假設這個特殊的例子是例外而不是規範?也許代碼*只是這個*手動? – 2012-03-02 10:45:09
我以爲我終於擺脫了手動datareader的東西...不要猜測。但是,我仍然喜歡Dapper。 – Rik 2012-03-02 11:15:13
如果你對此有特別的想法,我都是耳朵......但是......我看不到任何* easy * way = – 2012-03-02 11:25:36