2012-10-23 16 views
9

Kayıtlı bir yordamı veya bir işlevi doğrudan çağırırken SQL Server adlı parametreleri ObjectContext.ExecuteStoreQuery ve ObjectContext.ExecuteStoreCommand ile kullanmaya çalışıyorum.SQL Server adlı parametreleri ExecuteStoreQuery ve ExecuteStoreCommand ile kullanma

SQL Server adlandırılmış parametreler Varlık Framework adlandırılmış parametreleri ile aynı değildir - onlar beni benzer bir sorguyu yürütmek için izin bu bir:

EXEC sp_GetData @firstParameter = 1, @thirdParameter = 2, @secondParameter = 1 

bu sorguda parametrelerin sırası meselesi olarak değil Sırasıyla değerlendirilen Varlık Çerçevesi parametrelerine karşı çıktı.

SQL Server adlı parametreleri Entity Framework ile kullanmak istiyorum, böylece saklı yordamda parametrelerin sırası değiştiğinde, çağrılan Entity Framework kodu etkilenmez.

cevap

15

Bunu beklediğiniz gibi çalışmak için, sorgu metnini parametreli bir sorgu olarak ayarlamanız gerekir. Bu sistem saklı procs nasıl adlandırıldığı olduğu gibi sp_who başlamak saklanan prosedürleri isim yok -

Bilginize
var cmdText = "[DoStuff] @Name = @name_param, @Age = @age_param"; 
var @params = new[]{ 
    new SqlParameter("name_param", "Josh"), 
    new SqlParameter("age_param", 45) 
}; 

ObjectContext.ExecuteStoreQuery<MyObject>(cmdText, @params); 
+0

Cevabınızı bulduktan sonra şanslı hissettim ve bir çekicilik gibi çalıştı. – Signcodeindie

+0

Bu daha fazla çekişe ihtiyaç duyar. SP'de parametre sıralamasına güvenmeden bir SP'yi çağırmanın en iyi yoludur. – mmcrae

4

: zor kısmı sadece kendi parametreleri SP parametreleri farklı adlandırılır emin olmak gerekir olmasıdır. Sonuç, SQL sunucusunun tanımınızı bulmadan önce tüm sistemde saklanan provalara bakması ve saklanan birçok prog ve çağrı ile üretimde daha yavaş görünmesidir.