DocumentDB SQL - JavaScript Entegrasyonu

Bugünlerde JavaScript her yerde ve sadece tarayıcılarda değil. DocumentDB, JavaScript'i modern bir T-SQL türü olarak benimser ve doğrudan veritabanı motorunun içinde yerel olarak JavaScript mantığının işlemsel yürütülmesini destekler. DocumentDB, JavaScript tabanlı uygulama mantığını depolanan prosedürler ve tetikleyiciler açısından doğrudan koleksiyonlar üzerinde çalıştırmak için bir programlama modeli sağlar.

Basit bir mağaza prosedürü oluşturduğumuz bir örneğe bakalım. Adımlar aşağıdadır -

Step 1 - Yeni bir konsol uygulamaları oluşturun.

Step 2- NuGet'ten .NET SDK'yı ekleyin. Burada .NET SDK kullanıyoruz; bu, depolanan yordamımızı oluşturmak, yürütmek ve sonra silmek için bazı C # kodları yazacağımız anlamına gelir, ancak saklı yordamın kendisi JavaScript'te yazılır.

Step 3 - Solution explorer'da projeye sağ tıklayın.

Step 4 - Depolanan prosedür için yeni bir JavaScript dosyası ekleyin ve buna HelloWorldStoreProce.js adını verin

Her saklı yordam yalnızca bir JavaScript işlevidir, bu nedenle yeni bir işlev oluşturacağız ve doğal olarak bu işlevi de adlandıracağız. HelloWorldStoreProce. İşleve bir ad vermemiz önemli değil. DocumentDB, bu saklı yordama yalnızca, onu oluşturduğumuzda sağladığımız kimlik ile başvurur.

function HelloWorldStoreProce() { 
   var context = getContext(); 
   var response = context.getResponse(); 
   response.setBody('Hello, and welcome to DocumentDB!'); 
}

Tüm saklı yordamın yaptığı, yanıt nesnesini bağlamdan almak ve setBodyarayana bir dize döndürme yöntemi. C # kodunda, saklı yordamı oluşturacağız, çalıştıracağız ve sonra sileceğiz.

Depolanan prosedürler koleksiyon başına kapsamlıdır, bu nedenle saklı prosedürü oluşturmak için koleksiyonun SelfLink'ine ihtiyacımız olacaktır.

Step 5 - için ilk sorgu myfirstdb veritabanı ve ardından MyCollection Toplamak.

Depolanan bir yordam oluşturmak, DocumentDB'de başka bir kaynak oluşturmak gibidir.

private async static Task SimpleStoredProcDemo() {  
   var endpoint = "https://azuredocdbdemo.documents.azure.com:443/"; 
   var masterKey = 
      "BBhjI0gxdVPdDbS4diTjdloJq7Fp4L5RO/StTt6UtEufDM78qM2CtBZWbyVwFPSJIm8AcfDu2O+AfV T+TYUnBQ==";
	  
   using (var client = new DocumentClient(new Uri(endpoint), masterKey)) { 
      // Get database 
      Database database = client 
         .CreateDatabaseQuery("SELECT * FROM c WHERE c.id = 'myfirstdb'") 
         .AsEnumerable() 
         .First();
			
      // Get collection 
      DocumentCollection collection = client 
         .CreateDocumentCollectionQuery(database.CollectionsLink, "SELECT * FROM 
         c WHERE c.id = 'MyCollection'") 
         .AsEnumerable() 
         .First();
			
      // Create stored procedure 
      var sprocBody = File.ReadAllText(@"..\..\HelloWorldStoreProce.js"); 
		
      var sprocDefinition = new StoredProcedure { 
         Id = "HelloWorldStoreProce", 
         Body = sprocBody 
      };
	  
      StoredProcedure sproc = await client.
         CreateStoredProcedureAsync(collection.SelfLink, sprocDefinition); 
      Console.WriteLine("Created stored procedure {0} ({1})", 
         sproc.Id, sproc.ResourceId);
				  
      // Execute stored procedure 
      var result = await client.ExecuteStoredProcedureAsync(sproc.SelfLink); 
      Console.WriteLine("Executed stored procedure; response = {0}", result.Response);
	  
      // Delete stored procedure 
      await client.DeleteStoredProcedureAsync(sproc.SelfLink); 
      Console.WriteLine("Deleted stored procedure {0} ({1})", 
         sproc.Id, sproc.ResourceId); 
   }  
} 

Step 6 - Önce yeni kaynağın Id'sine sahip bir tanım nesnesi oluşturun ve ardından üzerindeki Create yöntemlerinden birini çağırın. DocumentClientnesne. Depolanan yordam durumunda, tanım, kimliği ve sunucuya göndermek istediğiniz gerçek JavaScript kodunu içerir.

Step 7 - Çağrı File.ReadAllText depolanan yordam kodunu JS dosyasından çıkarmak için.

Step 8 - Depolanan yordam kodunu, tanım nesnesinin body özelliğine atayın.

DocumentDB söz konusu olduğunda, tanımda burada belirttiğimiz kimlik, JavaScript işlevini gerçekte ne adlandırırsak adlandıralım, saklı yordamın adıdır.

Bununla birlikte, saklı yordamları ve diğer sunucu tarafı nesneleri oluştururken, JavaScript işlevlerini adlandırmamız ve bu işlev adlarının DocumentDB tanımında belirlediğimiz kimlik ile eşleşmemesi önerilir.

Step 9 - Çağrı CreateStoredProcedureAsyncgeçerken SelfLink için MyCollectiontoplama ve saklı yordam tanımı. Bu, saklı yordamı oluşturur veResourceId ona atanan DocumentDB.

Step 10 - Saklanan prosedürü arayın. ExecuteStoredProcedureAsync, dinamik bir nesnenin döndürülmesini istiyorsanız basitçe bir nesne olarak belirtebileceğiniz, saklı yordam tarafından döndürülen değerin beklenen veri türüne ayarladığınız bir tür parametresini alır. Bu, özellikleri çalışma zamanında bağlanacak bir nesnedir.

Bu örnekte, saklı yordamımızın yalnızca bir dizge döndürdüğünü biliyoruz ve bu nedenle ExecuteStoredProcedureAsync<string>.

Aşağıda Program.cs dosyasının tam uygulaması verilmiştir.

using Microsoft.Azure.Documents; 
using Microsoft.Azure.Documents.Client; 
using Microsoft.Azure.Documents.Linq; 

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.IO; 

using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace DocumentDBStoreProce { 
   class Program { 
      private static void Main(string[] args) { 
         Task.Run(async () => { 
            await SimpleStoredProcDemo(); 
         }).Wait(); 
      } 
	  
      private async static Task SimpleStoredProcDemo() {  
         var endpoint = "https://azuredocdbdemo.documents.azure.com:443/"; 
         var masterKey = 
            "BBhjI0gxdVPdDbS4diTjdloJq7Fp4L5RO/StTt6UtEufDM78qM2CtBZWbyVwFPSJIm8AcfDu2O+AfV T+TYUnBQ==";  
				
         using (var client = new DocumentClient(new Uri(endpoint), masterKey)) { 
            // Get database 
            Database database = client 
               .CreateDatabaseQuery("SELECT * FROM c WHERE c.id = 'myfirstdb'")
               .AsEnumerable() 
               .First(); 
					
            // Get collection 
            DocumentCollection collection = client 
               .CreateDocumentCollectionQuery(database.CollectionsLink, 
               "SELECT * FROM c WHERE c.id = 'MyCollection'") 
               .AsEnumerable() 
               .First();
					 
            // Create stored procedure 
            var sprocBody = File.ReadAllText(@"..\..\HelloWorldStoreProce.js"); 
				
            var sprocDefinition = new StoredProcedure { 
               Id = "HelloWorldStoreProce", 
               Body = sprocBody 
            };
			
            StoredProcedure sproc = await client
               .CreateStoredProcedureAsync(collection.SelfLink, sprocDefinition);
					
            Console.WriteLine("Created stored procedure {0} ({1})", sproc
               .Id, sproc.ResourceId);
					 
            // Execute stored procedure 
            var result = await client
               .ExecuteStoredProcedureAsync<string>(sproc.SelfLink); 
            Console.WriteLine("Executed stored procedure; response = {0}", 
               result.Response);
					
            // Delete stored procedure 
            await client.DeleteStoredProcedureAsync(sproc.SelfLink); 
            Console.WriteLine("Deleted stored procedure {0} ({1})", 
               sproc.Id, sproc.ResourceId); 
         } 
      } 
   } 
}

Yukarıdaki kod çalıştırıldığında, aşağıdaki çıktıyı üretir.

Created stored procedure HelloWorldStoreProce (Ic8LAMEUVgACAAAAAAAAgA==)

Executed stored procedure; response = Hello, and welcome to DocumentDB!

Yukarıdaki çıktıda görüldüğü gibi, yanıt özelliği "Merhaba, DocumentDB'ye hoş geldiniz!" saklı yordamımız tarafından iade edildi.