Aracılığıyla paylaş


Veritabanı İşlevleri

Veritabanı işlevleri, C# yöntemlerinin veritabanı eşdeğeridir. Bir veritabanı işlevi sıfır veya daha fazla parametreyle çağrılabilir ve sonucu parametre değerlerine göre hesaplar. Sorgulama için SQL kullanan veritabanlarının çoğu veritabanı işlevlerine yönelik destek içerir. Bu nedenle EF Core sorgu çevirisi tarafından oluşturulan SQL, veritabanı işlevlerinin çağrılmasına da olanak tanır. C# yöntemlerinin kesinlikle EF Core'daki veritabanı işlevlerine çevrilmesi gerekmez.

  • C# yönteminin eşdeğer veritabanı işlevi olmayabilir.
    • String.IsNullOrEmpty yöntemi null denetime ve bir işlev yerine veritabanındaki boş bir dizeyle karşılaştırmaya çevrilir.
    • String.Equals(String, StringComparison) dize karşılaştırması veritabanında kolayca temsil edilebileceğinden veya taklit edilebildiğinden yöntemin veritabanı eşdeğeri yoktur.
  • Veritabanı işlevinin eşdeğer bir C# yöntemi olmayabilir. ?? Herhangi bir yöntemi olmayan C# işleci, veritabanındaki COALESCE işleve çevrilir.

Veritabanı işlevleri türleri

EF Core SQL oluşturma, veritabanlarında kullanılabilecek işlevlerin bir alt kümesini destekler. Bu sınırlama, verilen veritabanı işlevi için LINQ'de bir sorguyu temsil etme özelliğinden gelir. Ayrıca, her veritabanının veritabanı işlevlerinin farklı desteği vardır, bu nedenle EF Core ortak bir alt küme sağlar. Veritabanı sağlayıcısı, daha fazla deseni desteklemek için EF Core SQL neslini genişletmekte serbesttir. EF Core tarafından desteklenen ve benzersiz olarak tanımlanan veritabanı işlevleri türleri aşağıdadır. Bu terimler, EF Core sağlayıcılarıyla birlikte hangi çevirilerin yerleşik olarak geldiğini anlamanıza da yardımcı olur.

Yerleşik ve kullanıcı tanımlı işlevler karşılaştırması

Yerleşik işlevler önceden tanımlanmış veritabanıyla birlikte gelir, ancak kullanıcı tanımlı işlevler veritabanındaki kullanıcı tarafından açıkça tanımlanır. EF Core sorguları veritabanı işlevlerini kullanacak şekilde çevirdiğinde, işlevin veritabanında her zaman kullanılabilir olduğundan emin olmak için yerleşik işlevleri kullanır. Sql'i doğru bir şekilde oluşturmak için bazı veritabanlarında yerleşik işlevlerin ayrımı gereklidir. Örneğin SqlServer, kullanıcı tanımlı her işlevin şemaya uygun bir adla çağrılmış olmasını gerektirir. Ancak SqlServer'daki yerleşik işlevlerin şeması yoktur. PostgreSQL şemada public yerleşik işlevi tanımlar, ancak bunlar şemaya uygun adlarla çağrılabilir.

Toplama ve skaler ve tablo değerli işlevler karşılaştırması

  • Skaler işlevler, tamsayılar veya dizeler gibi skaler değerleri parametre olarak alır ve sonuç olarak bir skaler değer döndürür. Skaler işlevler SQL'de bir skaler değerin geçirilebildiği herhangi bir yerde kullanılabilir.
  • Toplama işlevleri skaler değerlerin akışını parametre olarak alır ve sonuç olarak bir skaler değer döndürür. Toplama işlevleri, sorgu sonuç kümesinin tamamına veya işleç uygulanarak oluşturulan bir değer grubuna GROUP BY uygulanır.
  • Tablo değerli işlevler skaler değerleri parametre olarak alır ve sonuç olarak bir satır akışı döndürür. Tablo değerli işlevler yan tümcesinde FROM tablo kaynağı olarak kullanılır.

Niladic işlevleri

Niladic işlevleri, parametresi olmayan ve parantez olmadan çağrılması gereken özel veritabanı işlevleridir. C# dilindeki bir örnekteki özellik/alan erişimine benzerler. Niladic işlevleri, parametresiz işlevlerden farklıdır çünkü ikincisi boş parantez gerektirir. Veritabanı işlevleri için her zaman parantez gerektiren özel bir ad yoktur. Parametre sayısına dayalı veritabanı işlevlerinin bir diğer alt kümesi de variadic işlevlerdir. Variadic işlevleri çağrıldığında değişen sayıda parametre alabilir.

EF Core'da veritabanı işlevi eşlemeleri

EF Core, C# işlevleriyle veritabanı işlevleri arasında üç farklı eşleme yolunu destekler.

Yerleşik işlev eşlemesi

Varsayılan olarak EF Core sağlayıcıları, temel türler üzerinde çeşitli yerleşik işlevler için eşlemeler sağlar. Örneğin, String.ToLower() SqlServer'da olarak çevrilir LOWER . Bu işlevsellik, kullanıcıların LINQ'te sorunsuz bir şekilde sorgu yazmasına olanak tanır. Genellikle veritabanında C# işlevinin istemci tarafında sağladığıyla aynı sonucu veren bir çeviri sağlarız. Bazen, bunu başarmak için gerçek çeviri veritabanı işlevinden daha karmaşık bir şey olabilir. Bazı senaryolarda, C# semantiği yerine en uygun çeviriyi de sağlarız. Aynı özellik, bazı C# üye erişimleri için ortak çeviriler sağlamak için de kullanılır. Örneğin, String.Length SqlServer'da olarak çevrilir LEN . Sağlayıcılar dışında, eklenti yazarları ek çeviriler de ekleyebilir. Bu genişletilebilirlik, eklentiler ilkel türler olarak daha fazla tür için destek eklediğinde ve yöntemleri bunların üzerine çevirmek istediğinde kullanışlıdır.

EF. İşlev eşleme

Tüm veritabanı işlevlerinin eşdeğer C# işlevleri olmadığından EF Core sağlayıcılarının belirli veritabanı işlevlerini çağırmak için özel C# yöntemleri vardır. Bu yöntemler, LINQ sorgularında kullanılacak uzantı EF.Functions yöntemleri olarak tanımlanır. Bu yöntemler belirli veritabanı işlevlerine yakından bağlı olduklarından sağlayıcıya özgü yöntemlerdir. Bu nedenle, bir sağlayıcı için çalışan bir yöntem büyük olasılıkla başka bir sağlayıcı için çalışmaz. Ayrıca, bu yöntemlerin amacı çevrilmiş sorguda bir veritabanı işlevini çağırmak olduğundan, bunları istemcide değerlendirmeye çalışmak bir özel durumla sonuçlanır.

Kullanıcı tanımlı işlev eşleme

KULLANıCıLAR, EF Core sağlayıcıları tarafından sağlanan eşlemelerin dışında özel eşleme de tanımlayabilir. Kullanıcı tanımlı eşleme, sorgu çevirisini kullanıcı gereksinimlerine göre genişletir. Bu işlev, veritabanında kullanıcının LINQ sorgusundan çağırmak istediği kullanıcı tanımlı işlevler olduğunda kullanışlıdır.

Ayrıca bkz.