2011-06-27 36 views
5

(Önceden) mvc-mini-profiler kullanan bazı önceden var olan SqlConnection saklı yordam koduyla kullanmaya çalışıyorum (EF veya L2S'yi kullanmıyoruz, sadece ADO .NET to SQL Server 2008). Devralınan ProfiledDb türlerinin bu tür bir kodla nasıl birleştirileceğine dair bir kılavuz arıyorum.mvc-mini-profiler kullanarak ADO.NET SqlConnection ile

var con = new SqlConnection("connectionstring"); 
var cmd = new SqlCommand(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Connection = con; 
cmd.CommandText = "SP_STORED_PROCEDURE_NAME"; 
cmd.Paramters.Add("recordsetid",SqlDbType.UniqueIdentifier).Value = recordsetid; 
var dSet = new DataSet(); 
var da = new SqlDataAdapter(cmd); 
da.fill(dSet); 
<parse DataSet> 

eski ADO.NET kullanıcıları çünkü SQL profilci bu duruma uygulanabilir olması gerektiğini görünen yüzeyinde çok iyi olurdu bizim için burada Any help yapmanız gerekecektir

+0

Sam'in geri bildirimine dayanarak, sadece bunun yerine Dapper'i uyguluyorum ve yaklaşık 20'ye 50 satırlık kod ve önemli ölçüde azaltılmış karmaşıklığı aldım. SqlDataReader'lar için parametre toplaması için 'DbDataReader' ve' DbType.Guid' kullanarak 'System.Data.Common' equivelant ile tüm MS SQL spesifik bitlerini değiştirerek' bir çözüm uygulayabildim. Sam çok daha ayrıntılı olduğundan bahsetmişken, çok fazla kod yazıyormuşsunuz demektir ve Dapper'ı daha iyi sunabilirdiniz (imo) varolan bir SqlDataAdapter'e bağlamaya çalışmaktan ziyade daha iyi hizmet verebilir (imo) – TodK

cevap

4

bağlantınızı tamamlamayı olduğunu ve DbConnection CreateCommand fabrikasını kullanın.

Benzer şekilde paraşütleri geçmek için temel arayüz yöntemlerini kullanmanız ve sarılmaması için SqlParameter gibi şeylerden kaçınmanız gerekir.

Yani:

var cnn = MvcMiniProfiler.Data.ProfiledDbConnection.Get(new SqlConnection(str)); 
var cmd = cnn.CreateCommand(); 
var param = cmd.CreateParameter(); 
... 

ben test etmedim DataSets ve DataAdapters, dürüstçe ben daha az ayrıntılıdır bugünlerde olarak bu tarz şeyler için Dapper kullanın. Eğer oynarsa, Google kodunda rapor ettiğinizden emin olun.

+0

Dapper daha kolaydı tbh. Teşekkürler! – TodK

+0

Ayrıca bir 'SqlDataAdapter' profilleme ile sarmak için kullanabileceğiniz bir 'ProfiledDbDataAdapter' sınıfı da var. Http://stackoverflow.com/a/13793409/8479 adresine bakın. – Rory

3

Tüm SQL'imizin saklı yordamlarda olduğu benzer bir durum var ve biz sadece bunları çağıran ADO.NET kodumuz var. Ayrıca mutlu olduğum bir veri erişim katmanım var, bu yüzden MiniProfiler'i yerleştirmek için parçalarını yeniden yazmak zorunda kalmama fikrini sevmiyorum.

Bu yüzden uzlaştığım uzlaşma, prosedür çağrılarının etrafındaki standart MiniProfiler.Step() çağrılarını kullanmaktı. Benim durumumda, ExecuteReader() ve diğerleri için yapılan tüm çağrıların bir temel sınıfın bir parçası olduğunu, böylece tüm SqlCommand'ların birkaç temel yöntem içinde yürütüldüğünü biliyorum, böylece mevcut kodumu şuna benzemek çok kolaydı:

Eminim Sam'in cevabı kadar iyi değil, çünkü bazı ayrıntılar sonuç sekmesinde eksik olacak, ancak veritabanı çağrılarını şu an için çok az değişiklikle analiz etmek için yeterince iyi çalışıyor. veri erişim kodu yapısı.

İlgili konular