[英]Populating KeyValuePair from stored procedure with IMultipleResults fails due to parameterless constructor
我試圖找到一種很好的方法來獲取所有查找結果,這些查找結果在一次數據庫旅行中就使用下拉列表填充了下拉列表,並且使用了泛型,因此我不必創建一堆自定義類。 我想避免創建一堆自定義類,例如Class IntStringPair
, Class StringStringPair
, Class 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中內置使用泛型的類,並允許我一次獲得多個結果集?
如果創建自己的通用對類,則可以使用它。 我用Value1
和Value2
屬性創建了一個,但是如果需要,可以創建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.