RelationalQueryableExtensions Sınıf

Tanım

LINQ sorguları için ilişkisel veritabanına özgü uzantı yöntemleri.

public static class RelationalQueryableExtensions
type RelationalQueryableExtensions = class
Public Module RelationalQueryableExtensions
Devralma
RelationalQueryableExtensions

Yöntemler

AsSingleQuery<TEntity>(IQueryable<TEntity>)

Sorgu sonuçlarında koleksiyonları tek bir veritabanı sorgusuyla yüklemek için yapılandırılmış yeni bir sorgu döndürür.

Bu davranış genellikle eşzamanlı güncelleştirmeler karşısında sonuç tutarlılığını garantiler (ancak ayrıntılar kullanılan veritabanına ve işlem yalıtımı düzeyine göre değişebilir). Ancak bu, sorgu birden çok ilgili koleksiyon yüklerken performans sorunlarına neden olabilir.

Sorgular için varsayılan sorgu bölme davranışı tarafından UseQuerySplittingBehavior(QuerySplittingBehavior) denetlenebilirsiniz.

AsSplitQuery<TEntity>(IQueryable<TEntity>)

Ayrı veritabanı sorguları aracılığıyla sorgu sonuçlarına koleksiyon yüklemek için yapılandırılmış yeni bir sorgu döndürür.

Bu davranış, sorgu birden çok koleksiyon yüklerken performansı önemli ölçüde geliştirebilir. Ancak, ayrı sorgular kullanılırken bu durum eşzamanlı güncelleştirmeler oluştuğunda tutarsız sonuçlara neden olabilir. Seri hale getirilebilir veya anlık görüntü işlemleri bunu azaltmak ve bölünmüş sorgularla tutarlılık elde etmek için kullanılabilir, ancak bu başka performans maliyetleri ve davranış farkı getirebilir.

Sorgular için varsayılan sorgu bölme davranışı tarafından UseQuerySplittingBehavior(QuerySplittingBehavior) denetlenebilirsiniz.

CreateDbCommand(IQueryable)

Bu DbCommand sorguyu yürütmek için bir ayar oluşturur.

Bu yalnızca genellikle sorgular tarafından oluşturulan sorgular tarafından Entity Framework Core.

Uyarı: Bu komutun doğrudan yürütülmesinin, komutu yürüten kullanıcıyla aynı davranışa EF Core garanti edilemez.

DbCommand'in bir nesne olduğunu IDisposable unutmayın. Çağıran, döndürülen komutun elden döndürülerek sorumludur.

Bu yalnızca genellikle sorgular tarafından oluşturulan sorgular tarafından Entity Framework Core.

FromSql<TEntity>(IQueryable<TEntity>, FormattableString)
Kullanımdan kalktı.

Bir linq sorgusunu temsil eden irdelenmiş dizeyi temel alan bir LINQ SQL oluşturur.

Veritabanı sağlayıcısı sağlanan veri SQL destekliyorsa LINQ işleçlerini kullanarak ham SQL üzerinde oluşturabilirsiniz - context.Blogs.FromSql("SELECT * FROM dbo.Blogs").OrderBy(b => b.Name).

Api'lerde olduğu gibi SQL ekleme saldırısına karşı korumak için tüm kullanıcı girişlerini parametre SQL önemlidir. İlişkili parametre yer tutucularını sorgu dizesinde SQL ebilirsiniz. İlişkili olarak temin edersiniz tüm parametre değerleri otomatik olarak DbParameter'a dönüştürülür - context.Blogs.FromSql($"SELECT * FROM [dbo].[SearchBlogs]({userSuppliedSearchTerm})").

FromSql<TEntity>(IQueryable<TEntity>, RawSqlString, Object[])
Kullanımdan kalktı.

Ham bir sorguyu temel alan bir LINQ SQL oluşturur.

Veritabanı sağlayıcısı sağlanan veri SQL destekliyorsa LINQ işleçlerini kullanarak ham SQL üzerinde oluşturabilirsiniz - context.Blogs.FromSql("SELECT * FROM dbo.Blogs").OrderBy(b => b.Name).

Api'lerde olduğu gibi SQL ekleme saldırısına karşı korumak için tüm kullanıcı girişlerini parametre SQL önemlidir. Parametre yer tutucularını sorgu dizesinde SQL ve ardından parametre değerlerini ek bağımsız değişkenler olarak belirtebilirsiniz. Temin edersiniz tüm parametre değerleri otomatik olarak DbParameter'a dönüştürülür - context.Blogs.FromSql("SELECT * FROM [dbo].[SearchBlogs]({0})", userSuppliedSearchTerm).

Bu aşırı yükleme dbParameter örneklerini parametre değerleri olarak da kabul eder. Bu, sorgu dizesinde adlandırılmış parametreleri SQL sağlar - context.Blogs.FromSql("SELECT * FROM [dbo].[SearchBlogs]({@searchTerm})", new SqlParameter("@searchTerm", userSuppliedSearchTerm))

FromSql<TEntity>(IQueryable<TEntity>, String, Object[])

Ham bir sorguyu temel alan bir LINQ SQL oluşturur.

Veritabanı sağlayıcısı sağlanan veri SQL destekliyorsa LINQ işleçlerini kullanarak ham SQL üzerinde oluşturabilirsiniz - context.Blogs.FromSql("SELECT * FROM dbo.Blogs").OrderBy(b => b.Name).

Api'lerde olduğu gibi SQL ekleme saldırısına karşı korumak için tüm kullanıcı girişlerini parametre SQL önemlidir. Parametre yer tutucularını sorgu dizesinde SQL ve ardından parametre değerlerini ek bağımsız değişkenler olarak belirtebilirsiniz. Temin edersiniz tüm parametre değerleri otomatik olarak DbParameter'a dönüştürülür - context.Blogs.FromSql("SELECT * FROM [dbo].[SearchBlogs]({0})", userSuppliedSearchTerm).

Ayrıca bir DbParameter oluşturun ve parametre değeri olarak bunu s belirtin. Bu, sorgu dizesinde adlandırılmış parametreleri SQL sağlar - context.Blogs.FromSql("SELECT * FROM [dbo].[SearchBlogs]({@searchTerm})", new SqlParameter("@searchTerm", userSuppliedSearchTerm))

FromSqlInterpolated<TEntity>(DbSet<TEntity>, FormattableString)

Bir linq sorgusunu temsil eden irdelenmiş dizeyi temel alan bir LINQ SQL oluşturur.

Veritabanı sağlayıcısı, sağlanan veri SQL destekliyorsa LINQ işleçlerini kullanarak ham SQL sorgunun üzerinde oluşturabilirsiniz:

context.Blogs.FromSqlInterpolated($"SELECT * FROM Blogs").OrderBy(b => b.Name)

Api'lerde olduğu gibi SQL ekleme saldırısına karşı korumak için tüm kullanıcı girişlerini parametre SQL önemlidir. İlişkili parametre yer tutucularını sorgu dizesinde SQL ebilirsiniz. İlişkili olarak temin edersiniz tüm parametre değerleri otomatik olarak bir değerine DbParameter dönüştürülür:

context.Blogs.FromSqlInterpolated($"SELECT * FROM Blogs WHERE Name = {userSuppliedSearchTerm}")
FromSqlRaw<TEntity>(DbSet<TEntity>, String, Object[])

Ham bir sorguyu temel alan bir LINQ SQL oluşturur.

Veritabanı sağlayıcısı, sağlanan veri SQL destekliyorsa LINQ işleçleri: bağlamını kullanarak ham SQL sorgunun üzerinde oluşturabilirsiniz. Blogs.FromSqlRaw("SELECT * FROM Blogs"). OrderBy(b = > b.Name).

Api'lerde olduğu gibi SQL ekleme saldırısına karşı korumak için tüm kullanıcı girişlerini parametre SQL önemlidir. Parametre yer tutucularını sorgu dizesinde SQL ve ardından parametre değerlerini ek bağımsız değişkenler olarak belirtebilirsiniz. Temin edersiniz tüm parametre değerleri otomatik olarak bir değerine DbParameter dönüştürülür:

context.Blogs.FromSqlRaw("SELECT * FROM Blogs WHERE Name = {0}", userSuppliedSearchTerm)

Ancak, hiçbir zaman doğrulanmış kullanıcı tarafından sağlanan değerlere sahip bir bir concatenated veya i İ ilişkilendirme dizesi ($"") bu yönteme geçmeyin. Bunu yapmak, ekleme saldırılarına karşı SQL ortaya çıkarır. İlişkili dize söz dizimlerini kullanmak için kullanarak FromSqlInterpolated<TEntity>(DbSet<TEntity>, FormattableString) parametre oluşturabilirsiniz.

Bu aşırı yükleme, örnekleri DbParameter parametre değerleri olarak da kabul eder. Yukarıdaki () gibi konumsal yer tutucuları kullanmaya ek olarak, adlandırılmış yer tutucuları doğrudan sorgu {0} dizesinde SQL kullanabilirsiniz:

context.Blogs.FromSqlRaw("SELECT * FROM Blogs WHERE Name = @searchTerm", new SqlParameter("@searchTerm", userSuppliedSearchTerm))

Şunlara uygulanır