Şu an için dapper.net'i kullanıyorum ve onunla çok iyi çalışan bir ORM mapper. Net dinamik tipleri var ama veriyi veritabanından alırken Dapper satır tipi olduğu zaman geri döndüğünü fark ettim. Ben herhangi bir şekilde iade edebilir herhangi bir şekilde System.Dynamic.ExpandoObject gibi mi?Dapper dinamik dönüş türleri
cevap
DapperRow
nesnesi, satırlar arasında birçok durumu paylaşmak üzere tasarlanmıştır. Örneğin, 40 satırı alırsanız, sütun adları, yalnızca'da bir kez depolanır. ExpandoObject
kullansaydık, bu satır başına yapılandırılması gerekirdi. Dolayısıyla, sahne arkası uygulama detayı olarak DapperRow
kullanımı kasıtlı bir verimliliktir.
dynamic
API'lerinden döndürülen nesnenin IDictionary<string,object>
olarak da yayınlanabileceğini unutmayın. Bu sözlük kullanımını destekleyen diğer türlerini desteklemeye açık olacağım - bunların bir tanesi ExpandoObject
.
var rows = conn.Query<ExpandoObject>(...);
eser: Yani evet, bu şekilde değiştirilebilir. Sadece desteğini desteği gerektirir ve bu kod şu anda mevcut değildir. Yani "hayır, ama belki de gelecekte inşa".
Ayrıca, DapperRow
'u kullanmanız gerekmediğini de unutmayın ... Daha fazla beklenen senaryosu, kendi türlerinizi gerçekleştirmek için genel API'yi kullanmaktır.
Elbette! Eğer bir dinamik nesne almak görebilir ve onlar iyi sorgu açıklamada tanımlandığı sürece özelliklerini erişebilir gibi
dynamic account = conn.Query<dynamic>(@"
SELECT Name, Address, Country
FROM Account
WHERE Id = @Id", new { Id = Id }).FirstOrDefault();
Console.WriteLine(account.Name);
Console.WriteLine(account.Address);
Console.WriteLine(account.Country);
: şık belgeler gereğince
sizin dymanics sorgu yöntemi kullanmak ve almak ..FirstOrDefault()
numaralı bağlantı noktasını kullanırsanız, istediğiniz her şeyi yapabileceğiniz bir IEnumerable<dynamic>
elde edersiniz.
Bu sorunu yaşıyorum ve bu şekilde çözdüm!
Query()
işlevi, aslında altındaki Dapper.SqlMapper.DapperRow
nesne türünde bir dizi dinamik döndürür. Dapper.SqlMapper.DapperRow
özeldir. Dapper.SqlMapper.DapperRow nesnelerine dinamik olarak özellikler eklemem gerekiyordu, ancak bu işe yaramaz. Sonuç olarak, Dapper.SqlMapper.DapperRow
'u ExpandoObject
'a dönüştürmek istedim.
Bu genel yardımcı yöntemini aşağıdaki gibi oluşturabiliyordum.
public class DapperHelpers
{
public static dynamic ToExpandoObject(object value)
{
IDictionary<string, object> dapperRowProperties = value as IDictionary<string, object>;
IDictionary<string, object> expando = new ExpandoObject();
foreach (KeyValuePair<string, object> property in dapperRowProperties)
expando.Add(property.Key, property.Value);
return expando as ExpandoObject;
}
}
Sonra böyle olduğunu kullanabilirsiniz:
IEnumerable<ExpandoObject> result =
db.SqlConn.Query(sqlScript)
.Select(x=> (ExpandoObject)ToExpandoObject(x));
referans: Biz açıkça nesneyi EXPANDO için şık satır dönüştürmek gerekiyor, doğru bir yaklaşım aşağıdaki aracılığıyla aktarılabilecek neden dapper-dot-net issues 166
- 1. Dinamik Burada dapper
- 2. Dapper
- 3. Dapper
- 4. Dapper
- 5. Dapper
- 6. Java olmadan çipte soyut yöntem türleri için farklı dönüş türleri
- 7. dapper -multi-mapping: iç içe nesneler için düz sql dönüş
- 8. neo4j Dinamik İlişkiler Türleri, enumlarla değil
- 9. Dinamik olarak ayarlanmış Func <> türleri
- 10. aynı yöntem adıyla iki Java arabirimi ancak farklı dönüş türleri
- 11. WebAPI 2 yardım dökümanlarını kırmayan geri dönüş türleri Web sitesi
- 12. C++ 14: üçlü ifadelerle Constexpr'ten çıkarılan (otomatik) dönüş türleri
- 13. Boş bir parametreyi Dapper
- 14. DataTable için Dapper
- 15. Dapper ve In Koşul
- 16. Dapper: ConnectionString özelliği başlatılmadı
- 17. Genel türleri
- 18. Enum özelliklerini doldurmak için Dapper kullanma
- 19. Dapper MySql güvenli sorgulama Sql Enjeksiyon karşı?
- 20. Dapper: Sorgudan Sözlük listesi nasıl okunur?
- 21. Zarif Mülkiyet Türleri
- 22. Türleri
- 23. Türleri
- 24. Montaj türleri - fark nedir
- 25. Dapper Çoklu harita sonraki seviye
- 26. Dapper: Bir dizgeyi enum'a dönüştürme
- 27. Dinamik türleri, yöntem parametreleri olarak kullanırken garip davranış
- 28. Dinamik <T> için dinamik tip?
- 29. Uyumsuz türleri: Delphi
- 30. Dönüş
? var satırlar = conn.Query (...); –
Belki de Dapper'ın sonraki sürümünde çalışıyorum ancak sürüm 1.4'te kullandım, bu dönüştürülmüş nesnenin hiçbir özelliği yok. Bu çözümü dapper sorunlarından buldum. – Behzad