我正在嘗試使用Dapper與ASP.NET SQL成員提供程序表進行交互。我包裝了SqlMembershipProvider類,並添加了一個額外的方法,讓我MembershipUsers給予一定的標準,我有一些自定義表。用Dapper調用自定義構造函數?
當用Dapper查詢數據時,看起來Dapper首先使用無參數構造函數實例化類,然後將返回的列「映射」到對象的屬性上。
但是,MembershipUser類的UserName屬性沒有setter。從Dapper SqlMapper.cs中的1417行左右來看,方法GetSettableProps()
只能得到可設置的屬性。
我試圖做一個MultiMap查詢來調用構造函數,但問題是傳入查詢的對象已經缺少UserName。
我猜我可以修改GetSettableProps()
方法,但我不確定這是否可行,還是會影響我現有的代碼。
有沒有辦法讓我調用MembershipUser類的自定義構造函數?
或者我可以對Dapper做出合理的改變來支持我的情況嗎?
** UPDATE **
馬克的回答使用非通用/動態查詢()方法是正確的,但對於後人,這是我指的是裏面小巧玲瓏的方法:
static List<PropInfo> GetSettableProps(Type t)
{
return t
.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.Select(p => new PropInfo
{
Name = p.Name,
Setter = p.DeclaringType == t ? p.GetSetMethod(true) : p.DeclaringType.GetProperty(p.Name).GetSetMethod(true),
Type = p.PropertyType
})
.Where(info => info.Setter != null)
.ToList();
}
是什麼線1417的樣子順便說一句,你可以發佈您的代碼示例爲他人,也許能夠迅速幫助你..? – MethodMan
說實話,我只是在這裏使用中間類型 - 或非通用查詢API(它通過「動態」)...我有一些ctor代碼,我可以從protobuf-net上解除,我真的不知道這會有好處... –