Próbuję użyć Dapper do interfejsu z tabelami ASP.NET SQL Membership Provider. Zawinęłem klasę SqlMembershipProvider i dodałem dodatkową metodę, aby uzyskać status MembershipUsers z uwzględnieniem pewnych kryteriów dotyczących niektórych niestandardowych tabel, które posiadam.Zadzwoń do konstruktora niestandardowego z Dapper?
Podczas wysyłania zapytania danymi za pomocą narzędzia Dapper wygląda na to, że Dapper najpierw tworzy instancję klasy za pomocą konstruktora bez parametrów, a następnie "odwzorowuje" zwrócone kolumny na właściwości obiektu.
Jednak właściwość UserName w klasie MembershipUser nie ma narzędzia ustawiającego. Sądząc po linii 1417 w Dapper SqlMapper.cs, metoda GetSettableProps()
uzyskuje tylko właściwości ustawialne.
Próbowałem wykonać kwerendę MultiMap, aby wywołać konstruktora, ale problem z tym, że obiekty przekazane do kwerendy już brakuje nazwy użytkownika.
Zgaduję, że mogę zmodyfikować metodę GetSettableProps()
, ale nie jestem pewien, czy to zadziała, czy też wpłynie na mój istniejący kod.
Czy muszę wywołać niestandardowy konstruktor, który ma klasa MembershipUser?
Czy istnieje rozsądna zmiana, którą mogę wprowadzić do Dappera, aby wesprzeć moją sytuację?
** UPDATE **
odpowiedź Marca użyć metody nierodzajową/Zapytanie dynamiczny() była poprawna, ale dla potomności, jest to metoda ja odnoszę się do wewnątrz Dapper:
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();
}
co ma wyglądać Linia 1417 btw można wysłać przykładowy kod dla innych, że być może w stanie pomóc szybko ..? – MethodMan
Szczerze mówiąc, użyłbym tutaj pośredniego typu - lub Non-generic Query API (który przechodzi przez "dynamic") ... Mam trochę kodu ctor, który mogłem podnieść z protobuf-net, ale ja ' Naprawdę nie jestem pewien czy to byłoby korzystne ... –