2013-08-08 14 views
7

Entity Framework raw SQL komutuna aşağıdaki gibi bir parametreyi nasıl eklerim? Örneğin, Id parametresini yapmak istediğimde ne yapmalıyım?Öğe çerçevesine nasıl bir parametre eklerim raw sql komutu

 using (var context = new NorthwindDBEntities()) 
     { 
      context.Database.ExecuteSqlCommand(@" 
       UPDATE dbo.Customers 
       SET Name = 'Test' WHERE Id = 1 
      "); 

     } 
+0

Sorunun ne olursa olsun istenirse, parametreler (SqlParameter) oluşturmayla ilgili olduğunu biliyorum, ancak, durumda bir UPDATE gibi bir raw sql komutunu çağırmak istiyorsanız, neden bir string.Format ("UPDATE") kullanmayın. .. SqlParameter yerine WHERE = {0} ", typedIdVariable)? – natenho

+1

@natenho: çünkü ne olursa olsun, SQL'i dize birleştirmeyle birleştirmeye kalkışmamalısınız. Muhtemelen tamsayı ikameleri için çalışacak olsa da (bu kullanıcının özel durumu), diğer durumlarda SQL enjeksiyonu için sizi olgunlaştırır. Kötü bir alışkanlık en iyi şekilde kaçınılır. – spender

+0

Beni başka bir ilgili soruya getiriyor. Context.usp_stored_proc (parm1, parm2) 'yi nasıl arayabileceğinizi biliyor musunuz? Bu bir enjeksiyon saldırısına mı maruz kalır? – Rod

cevap

19
context.Database.ExecuteSqlCommand(@"UPDATE dbo.Customers 
      SET Name = 'Test' WHERE Id = @Id", new SqlParameter("Id", 1)); 

birden parametrelerin

durumunda
context.Database.ExecuteSqlCommand(@"UPDATE dbo.Customers 
      SET Name = 'Test' WHERE Id = @id and Name [email protected]", 
       new SqlParameter("Id", id), 
       new SqlParameter("name", fname)); 
+0

Çoklu parametreler için bunu nasıl uygularız? – Silver

+0

@Silver Güncellenmiş cevabımı kontrol et – Damith

3

Aşağıdaki kod, bu senaryo için çalışması gerekir:

using (var context = new NorthwindDBEntities()) 
    { 
     context.Database.ExecuteSqlCommand(@" 
      UPDATE dbo.Customers 
      SET Name = 'Test' WHERE Id = {0} 
     ", 1); 
    } 

Ayrıca SqlParameter kullanabilir ve @id kullanabilirsiniz:

using (var context = new NorthwindDBEntities()) 
    { 
     context.Database.ExecuteSqlCommand(@" 
      UPDATE dbo.Customers 
      SET Name = 'Test' WHERE Id = @id 
     ", new SqlParameter("id", 1)); 
    } 
+0

Birden çok parametre için bunu nasıl uygularız? – Silver

İlgili konular