Dize tabanlı parametre enjeksiyonu yerine adlandırılmış parametreler kullanmanın büyük bir hayranıyım. Çoğu SQL enjeksiyon biçimine karşı güvenli ve güvenlidir. Eski ADO.NET'te, SqlCommand nesnesini ve sorgum için bir grup SqlParametre oluşturacağım.DbSet <T> .SqlQuery() kullanırken, adlandırılmış parametreler nasıl kullanılır?
var sSQL = "select * from Users where Name = @Name";
var cmd = new SqlCommand(conn, sSQL);
cmd.Parameters.AddWithValue("@Name", "Bob");
cmd.ExecuteReader();
Şimdi, Entity Framework, (bu bağlantıyı) belirir tekrar String.Format beyanı ve dize enjeksiyon basit gerilediği adres: (tartışma için basitleştirilmiş)
MyRepository.Users.SqlQuery("Select * from Users where Name = {0}", "Bob");
orada mı Entity Framework DbSqlQuery sınıfı ile adlandırılmış parametreleri kullanma yolu? Bir ObjectParameter başlatmasını adına iki nokta üst üste koymak gerekmez
var param = new ObjectParameter("p0", "Bob");
MyRepository.Users.SqlQuery("Select * from Users where Name = :p0", param);
: Ben yorum yapamam yana
Bu belge nerede? Ve SQL Body'da hangi isim formatlarına izin verilir? @name stilini desteklemiyor mu? –
@EricFalsken. [Burada MSDN'de] görebilirsiniz (http://msdn.microsoft.com/en-us/library/system.data.objects.objectparameter.aspx), ** bu \ @name stili desteklenmektedir **. – gdoron
Mükemmel! Çok teşekkürler! –