2012-10-17 8 views
6

Jestem wielkim fanem używania nazwanych parametrów zamiast iniekcji parametrów opartych na łańcuchach. Jest bezpieczny i bezpieczny w przypadku większości form wstrzykiwania SQL. W starym ADO.NET utworzyłbym obiekt SqlCommand i kilka SqlParameters dla mojego zapytania.Podczas korzystania z DbSet <T> .SqlQuery(), jak używać nazwanych parametrów?

var sSQL = "select * from Users where Name = @Name"; 
var cmd = new SqlCommand(conn, sSQL); 
cmd.Parameters.AddWithValue("@Name", "Bob"); 
cmd.ExecuteReader(); 

Teraz w Entity Framework, jak się wydaje, (na ten link), że cofnęła się proste stwierdzenie String.Format i wtrysku ciąg znowu: (uproszczony dyskusji)

MyRepository.Users.SqlQuery("Select * from Users where Name = {0}", "Bob"); 

Czy istnieje sposób używać nazwanych parametrów z klasą Entity Framework DbSqlQuery?

Odpowiedz

4
var param = new ObjectParameter(":p0", "Bob"); 
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param); 
+0

Gdzie jest to udokumentowane? A jakie formaty nazw są dopuszczalne w treści SQL? Czy to nie obsługuje stylu @name? –

+0

@EricFalsken. Możesz zobaczyć w [tutaj w MSDN] (http://msdn.microsoft.com/en-us/library/system.data.objects.objectparameter.aspx), ** ten styl \ @name są obsługiwane **. – gdoron

+0

Idealnie! Wielkie dzięki! –

2

Ponieważ nie mogę komentować, jestem ustalające inną odpowiedź:

var param = new ObjectParameter("p0", "Bob"); 
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param); 

nie trzeba postawić dwukropek imienia podczas uruchamianiu się ObjectParameter. Właśnie dlatego SLC dostał błąd, o którym wspomniał w swoim komentarzu.

Powiązane problemy