簡體   English   中英

由於無參數構造函數,使用IMultipleResults從存儲過程填充KeyValuePair失敗

[英]Populating KeyValuePair from stored procedure with IMultipleResults fails due to parameterless constructor

我試圖找到一種很好的方法來獲取所有查找結果,這些查找結果在一次數據庫旅行中就使用下拉列表填充了下拉列表,並且使用了泛型,因此我不必創建一堆自定義類。 我想避免創建一堆自定義類,例如Class IntStringPairClass StringStringPairClass StringIntPair等。

我知道C#具有KeyValuePair,所以我嘗試使用它,但是它引發了異常: 'System.Collections.Generic.KeyValuePair[System.Int32,System.String]' must declare a default (parameterless) constructor in order to be constructed during mapping.'

我看到了這篇文章: KeyValuePair-沒有無參數的構造函數?

但是奇怪的是,如果我只打一張桌子,它會工作,但是如果我從存儲過程中使用IMultipleResults ,它會失敗。

所以這有效:

using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString))
{
    return db.MyTable.Select(p => new KeyValuePair<string, string>(p.Field1, p.Field2)).ToList();
}

但這失敗了:

using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString))
{
    System.Data.Linq.IMultipleResults r = db.GetLookups();
    return r.GetResult<KeyValuePair<int,string>>().ToList();
}

如果我能使這最后一個工作,那么我將擁有兩全其美的優勢,一次數據庫旅行和一個通用的解決方案。

我也嘗試過Dictionary但是我總是遇到序列化問題。 我正在處理的應用程序很舊,因此它使用Linq to SQL代替了Entity Framework。

因此,有沒有一種方法可以在不創建一堆類的情況下進行操作,最好不要在C#/。NET中內置使用泛型的類,並允許我一次獲得多個結果集?

如果創建自己的通用對類,則可以使用它。 我用Value1Value2屬性創建了一個,但是如果需要,可以創建Key / Value

public class DBPair<T1, T2> {
    T1 v1;
    T2 v2;

    public DBPair() {
    }

    public DBPair(T1 v1, T2 v2) {
        this.v1 = v1;
        this.v2 = v2;
    }

    public T1 Value1
    {
        get; set;
    }
    public T2 Value2
    {
        get; set;
    }
}

注意:如果您需要KeyValuePair某些其他功能,例如成員相等性測試或哈希碼生成,則需要添加這些方法,或在檢索后將結果傳輸到新的KeyValuePair

然后,您可以像這樣使用它:

using (MyDataContext db = new MyDataContext(Config.CoreDBConnectionString))        
    return db.GetLookups().GetResult<DBPair<int,string>>().ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM