DbSet<TEntity> 类

定义

DbSet<TEntity>可用于查询和保存的实例 TEntity 。 针对的 LINQ 查询 DbSet<TEntity> 将转换为针对数据库的查询。

针对的 LINQ 查询结果 DbSet<TEntity> 将包含从数据库返回的结果,并且可能不会反映在尚未保存到数据库的上下文中所做的更改。 例如,结果将不包含新添加的实体,可能仍包含标记为要删除的实体。

根据所使用的数据库,可以在内存中计算 LINQ 查询的某些部分,而不是将其 DbSet<TEntity> 转换为数据库查询。

DbSet<TEntity> 对象通常从 DbSet<TEntity> 派生的属性 DbContext 或从 Set<TEntity>() 方法获取。

public abstract class DbSet<TEntity> : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<IServiceProvider>, Microsoft.EntityFrameworkCore.Query.Internal.IAsyncEnumerableAccessor<TEntity>, System.Collections.Generic.IEnumerable<TEntity>, System.Linq.IQueryable<TEntity> where TEntity : class
public abstract class DbSet<TEntity> : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<IServiceProvider>, Microsoft.EntityFrameworkCore.Query.Internal.IAsyncEnumerableAccessor<TEntity>, System.Collections.Generic.IEnumerable<TEntity>, System.ComponentModel.IListSource, System.Linq.IQueryable<TEntity> where TEntity : class
public abstract class DbSet<TEntity> : Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<IServiceProvider>, System.Collections.Generic.IAsyncEnumerable<TEntity>, System.Collections.Generic.IEnumerable<TEntity>, System.ComponentModel.IListSource, System.Linq.IQueryable<TEntity> where TEntity : class
type DbSet<'Entity (requires 'Entity : null)> = class
    interface IQueryable<'Entity (requires 'Entity : null)>
    interface seq<'Entity (requires 'Entity : null)>
    interface IEnumerable
    interface IQueryable
    interface IAsyncEnumerableAccessor<'Entity (requires 'Entity : null)>
    interface IInfrastructure<IServiceProvider>
type DbSet<'Entity (requires 'Entity : null)> = class
    interface IQueryable<'Entity (requires 'Entity : null)>
    interface seq<'Entity (requires 'Entity : null)>
    interface IEnumerable
    interface IQueryable
    interface IAsyncEnumerableAccessor<'Entity (requires 'Entity : null)>
    interface IInfrastructure<IServiceProvider>
    interface IListSource
type DbSet<'Entity (requires 'Entity : null)> = class
    interface IQueryable<'Entity (requires 'Entity : null)>
    interface seq<'Entity (requires 'Entity : null)>
    interface IEnumerable
    interface IQueryable
    interface IAsyncEnumerable<'Entity (requires 'Entity : null)>
    interface IInfrastructure<IServiceProvider>
    interface IListSource
Public MustInherit Class DbSet(Of TEntity)
Implements IAsyncEnumerableAccessor(Of TEntity), IEnumerable(Of TEntity), IInfrastructure(Of IServiceProvider), IQueryable(Of TEntity)
Public MustInherit Class DbSet(Of TEntity)
Implements IAsyncEnumerableAccessor(Of TEntity), IEnumerable(Of TEntity), IInfrastructure(Of IServiceProvider), IListSource, IQueryable(Of TEntity)
Public MustInherit Class DbSet(Of TEntity)
Implements IAsyncEnumerable(Of TEntity), IEnumerable(Of TEntity), IInfrastructure(Of IServiceProvider), IListSource, IQueryable(Of TEntity)

类型参数

TEntity

此集正在操作的实体的类型。

继承
DbSet<TEntity>
派生
实现
IInfrastructure<IServiceProvider> Microsoft.EntityFrameworkCore.Query.Internal.IAsyncEnumerableAccessor<TEntity> IEnumerable<T> IEnumerable<TEntity> IEnumerable IQueryable IQueryable<TEntity> IListSource IAsyncEnumerable<TEntity>

构造函数

DbSet<TEntity>()

属性

EntityType

IEntityType与此集关联的元数据。

Local

获取一个 LocalView<TEntity> ,它表示此集中的所有已添加、未更改和已修改的实体的本地视图。

在上下文中添加或删除实体时,该本地视图将保持同步。 同样,在本地视图中添加或删除实体也会自动在上下文中添加或删除实体。

此属性可用于通过用数据填充集来进行数据绑定,例如,通过使用 Load<TSource>(IQueryable<TSource>) 扩展方法,然后通过此属性调用 ToObservableCollection() for WPF Binding 或 WinForms 绑定到本地数据 ToBindingList()

方法

Add(TEntity)

开始跟踪给定实体,以及在状态中未被跟踪的任何其他可访问实体,以便在 Added 调用时将其插入到数据库中 SaveChanges()

State仅用于设置单个实体的状态。

AddAsync(TEntity, CancellationToken)

开始跟踪给定实体,以及在状态中未被跟踪的任何其他可访问实体,以便在 Added 调用时将其插入到数据库中 SaveChanges()

此方法只是允许使用特殊值生成器,如 "Microsoft.entityframeworkcore" 使用的生成器,以便以异步方式访问数据库。 对于所有其他情况,应使用非异步方法。

State仅用于设置单个实体的状态。

AddRange(IEnumerable<TEntity>)

开始跟踪给定的实体,以及在状态中未被跟踪的任何其他可访问实体,以便在 Added 调用时将其插入到数据库中 SaveChanges()

AddRange(TEntity[])

开始跟踪给定的实体,以及在状态中未被跟踪的任何其他可访问实体,以便在 Added 调用时将其插入到数据库中 SaveChanges()

AddRangeAsync(IEnumerable<TEntity>, CancellationToken)

开始跟踪给定的实体,以及在状态中未被跟踪的任何其他可访问实体,以便在 Added 调用时将其插入到数据库中 SaveChanges()

此方法只是允许使用特殊值生成器,如 "Microsoft.entityframeworkcore" 使用的生成器,以便以异步方式访问数据库。 对于所有其他情况,应使用非异步方法。

AddRangeAsync(TEntity[])

开始跟踪给定的实体,以及在状态中未被跟踪的任何其他可访问实体,以便在 Added 调用时将其插入到数据库中 SaveChanges()

此方法只是允许使用特殊值生成器,如 "Microsoft.entityframeworkcore" 使用的生成器,以便以异步方式访问数据库。 对于所有其他情况,应使用非异步方法。

AsAsyncEnumerable()

返回类型化为的此对象 IAsyncEnumerable<T>

这是一种便捷的方法,可帮助消除在扩展这两个接口的相同命名空间中的扩展方法的歧义。

AsQueryable()

返回类型化为的此对象 IQueryable<T>

这是一种便捷的方法,可帮助消除在扩展这两个接口的相同命名空间中的扩展方法的歧义。

Attach(TEntity)

默认情况下,开始跟踪给定实体的给定实体和可访问的条目 Unchanged ,但对于使用不同状态的情况,请参阅下面的情况。

通常,在调用之前不会执行数据库交互 SaveChanges()

将执行对导航属性的递归搜索以查找上下文尚未跟踪的可访问实体。 找到的所有实体将由上下文跟踪。

对于包含生成的键的实体类型,如果实体设置了其主键值,则会在状态中跟踪该实体 Unchanged 。 如果未设置主键值,则会在状态中跟踪 Added 。 这有助于确保只插入新的实体。 如果 primary key 属性设置为属性类型的 CLR 默认值以外的任何值,则会将该实体视为具有其主键值。

对于没有生成键的实体类型,状态集始终为 Unchanged

State仅用于设置单个实体的状态。

AttachRange(IEnumerable<TEntity>)

默认情况下,开始跟踪从给定实体中可访问的给定实体和条目 Unchanged ,但请参阅下面有关使用不同状态的情况。

通常,在调用之前不会执行数据库交互 SaveChanges()

将执行对导航属性的递归搜索以查找上下文尚未跟踪的可访问实体。 找到的所有实体将由上下文跟踪。

对于包含生成的键的实体类型,如果实体设置了其主键值,则会在状态中跟踪该实体 Unchanged 。 如果未设置主键值,则会在状态中跟踪 Added 。 这有助于确保只插入新的实体。 如果 primary key 属性设置为属性类型的 CLR 默认值以外的任何值,则会将该实体视为具有其主键值。

对于没有生成键的实体类型,状态集始终为 Unchanged

State仅用于设置单个实体的状态。

AttachRange(TEntity[])

默认情况下,开始跟踪从给定实体中可访问的给定实体和条目 Unchanged ,但请参阅下面有关使用不同状态的情况。

通常,在调用之前不会执行数据库交互 SaveChanges()

将执行对导航属性的递归搜索以查找上下文尚未跟踪的可访问实体。 找到的所有实体将由上下文跟踪。

对于包含生成的键的实体类型,如果实体设置了其主键值,则会在状态中跟踪该实体 Unchanged 。 如果未设置主键值,则会在状态中跟踪 Added 。 这有助于确保只插入新的实体。 如果 primary key 属性设置为属性类型的 CLR 默认值以外的任何值,则会将该实体视为具有其主键值。

对于没有生成键的实体类型,状态集始终为 Unchanged

State仅用于设置单个实体的状态。

Find(Object[])

查找带给定主键值的实体。 如果上下文正在跟踪具有给定主键值的实体,则它会立即返回,而不会向数据库发出请求。 否则,将对具有给定主键值的实体进行查询,如果找到此实体,则会将其附加到上下文并返回。 如果未找到实体,则返回 null。

FindAsync(Object[])

查找带给定主键值的实体。 如果上下文正在跟踪具有给定主键值的实体,则它会立即返回,而不会向数据库发出请求。 否则,将对具有给定主键值的实体进行查询,如果找到此实体,则会将其附加到上下文并返回。 如果未找到实体,则返回 null。

FindAsync(Object[], CancellationToken)

查找带给定主键值的实体。 如果上下文正在跟踪具有给定主键值的实体,则它会立即返回,而不会向数据库发出请求。 否则,将对具有给定主键值的实体进行查询,如果找到此实体,则会将其附加到上下文并返回。 如果未找到实体,则返回 null。

Remove(TEntity)

开始跟踪给定实体处于状态,以便在 Deleted 调用时将其从数据库中删除 SaveChanges()

RemoveRange(IEnumerable<TEntity>)

开始跟踪处于状态的给定实体 Deleted ,以便在调用时将其从数据库中删除 SaveChanges()

RemoveRange(TEntity[])

开始跟踪处于状态的给定实体 Deleted ,以便在调用时将其从数据库中删除 SaveChanges()

Update(TEntity)

默认情况下,开始跟踪给定实体的给定实体和可访问的条目 Modified ,但对于使用不同状态的情况,请参阅下面的情况。

通常,在调用之前不会执行数据库交互 SaveChanges()

将执行对导航属性的递归搜索以查找上下文尚未跟踪的可访问实体。 找到的所有实体将由上下文跟踪。

对于包含生成的键的实体类型,如果实体设置了其主键值,则会在状态中跟踪该实体 Modified 。 如果未设置主键值,则会在状态中跟踪 Added 。 这有助于确保将插入新实体,而将更新现有实体。 如果 primary key 属性设置为属性类型的 CLR 默认值以外的任何值,则会将该实体视为具有其主键值。

对于没有生成键的实体类型,状态集始终为 Modified

State仅用于设置单个实体的状态。

UpdateRange(IEnumerable<TEntity>)

默认情况下,开始跟踪从给定实体中可访问的给定实体和条目 Modified ,但请参阅下面有关使用不同状态的情况。

通常,在调用之前不会执行数据库交互 SaveChanges()

将执行对导航属性的递归搜索以查找上下文尚未跟踪的可访问实体。 找到的所有实体将由上下文跟踪。

对于包含生成的键的实体类型,如果实体设置了其主键值,则会在状态中跟踪该实体 Modified 。 如果未设置主键值,则会在状态中跟踪 Added 。 这有助于确保将插入新实体,而将更新现有实体。 如果 primary key 属性设置为属性类型的 CLR 默认值以外的任何值,则会将该实体视为具有其主键值。

对于没有生成键的实体类型,状态集始终为 Modified

State仅用于设置单个实体的状态。

UpdateRange(TEntity[])

默认情况下,开始跟踪从给定实体中可访问的给定实体和条目 Modified ,但请参阅下面有关使用不同状态的情况。

通常,在调用之前不会执行数据库交互 SaveChanges()

将执行对导航属性的递归搜索以查找上下文尚未跟踪的可访问实体。 找到的所有实体将由上下文跟踪。

对于包含生成的键的实体类型,如果实体设置了其主键值,则会在状态中跟踪该实体 Modified 。 如果未设置主键值,则会在状态中跟踪 Added 。 这有助于确保将插入新实体,而将更新现有实体。 如果 primary key 属性设置为属性类型的 CLR 默认值以外的任何值,则会将该实体视为具有其主键值。

对于没有生成键的实体类型,状态集始终为 Modified

State仅用于设置单个实体的状态。

显式接口实现

IAsyncEnumerable<TEntity>.GetAsyncEnumerator(CancellationToken)

返回一个 IAsyncEnumerator<T> ,枚举将对数据库异步执行查询。

IAsyncEnumerableAccessor<TEntity>.AsyncEnumerable

返回一个 IAsyncEnumerable<T> ,枚举将对数据库异步执行查询。

IEnumerable.GetEnumerator()

返回一个 IEnumerator ,枚举将对数据库执行查询以从数据库加载所有实体。

IEnumerable<TEntity>.GetEnumerator()

返回一个 IEnumerator<T> ,枚举将对数据库执行查询以从数据库加载所有实体。

IInfrastructure<IServiceProvider>.Instance

获取 IServiceProvider 用于解析服务的作用域。

此属性旨在供需要使用公共 API 图面中不直接公开的服务的扩展方法使用。

IListSource.ContainsListCollection

获取一个值,该值指示集合是否为 System.object 对象的集合。 始终返回 false

IListSource.GetList()

当尝试将数据直接绑定到时,数据绑定框架会调用此方法 DbSet<TEntity>

此实现始终引发异常,因为直接绑定到 DbSet<TEntity> 将导致查询在每次数据绑定框架请求集合内容时发送到数据库。 改为将结果加载到上下文中,例如通过使用 Load<TSource>(IQueryable<TSource>) 扩展方法,然后通过 Local 调用 ToObservableCollection() WPF 绑定或 WinForms 绑定到本地数据 ToBindingList()

IQueryable.ElementType

获取 IQueryable 元素类型。

IQueryable.Expression

获取 IQueryable LINQ 表达式。

IQueryable.Provider

获取 IQueryable 提供程序。

扩展方法

WithPartitionKey<TEntity>(IQueryable<TEntity>, String)

指定用于查询的分区的分区键。 使用基于分区键提供权限的资源令牌进行身份验证时,需要

AllAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式确定序列的所有元素是否都满足条件。

AnyAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式确定序列的任何元素是否满足条件。

AnyAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式确定序列是否包含任何元素。

AsAsyncEnumerable<TSource>(IQueryable<TSource>)

返回 IAsyncEnumerable<T> 可异步枚举的。

AsNoTracking<TEntity>(IQueryable<TEntity>)

更改跟踪器不会跟踪从 LINQ 查询返回的任何实体。 如果修改了实体实例,则更改跟踪器将无法检测到该实例,并且 SaveChanges() 不会将这些更改保存到数据库中。

禁用更改跟踪对于只读方案非常有用,因为这样可以避免为每个实体实例设置更改跟踪的开销。 如果要使用来处理实体实例并将这些更改保存到数据库,则不应禁用更改跟踪 SaveChanges()

将不会执行标识解析。 如果具有给定键的实体在结果集中的结果不同,则它们将是不同的实例。

查询的默认跟踪行为可由控制 QueryTrackingBehavior

AsNoTrackingWithIdentityResolution<TEntity>(IQueryable<TEntity>)

更改跟踪器不会跟踪从 LINQ 查询返回的任何实体。 如果修改了实体实例,则更改跟踪器将无法检测到该实例,并且 SaveChanges() 不会将这些更改保存到数据库中。

禁用更改跟踪对于只读方案非常有用,因为这样可以避免为每个实体实例设置更改跟踪的开销。 如果要使用来处理实体实例并将这些更改保存到数据库,则不应禁用更改跟踪 SaveChanges()

将执行标识解析,以确保结果集中具有给定键的所有实体都由同一个实体实例表示。

查询的默认跟踪行为可由控制 QueryTrackingBehavior

AsTracking<TEntity>(IQueryable<TEntity>)

返回一个新查询,其中更改跟踪器将跟踪返回的所有实体的更改。 在期间,将检测到对实体实例的任何修改,并将其保存到数据库中 SaveChanges()

查询的默认跟踪行为可由控制 QueryTrackingBehavior

AsTracking<TEntity>(IQueryable<TEntity>, QueryTrackingBehavior)

返回一个新查询,在此查询中,更改跟踪器将跟踪对返回的所有实体的更改,而不是根据 "track" 参数的值。 跟踪时,将在中检测到对实体实例的任何修改,并将其保存到数据库中 SaveChanges() 。 如果未进行跟踪,则更改跟踪器不会检测到此实体实例,也 SaveChanges() 不会将这些更改保存到数据库。

禁用更改跟踪对于只读方案非常有用,因为这样可以避免为每个实体实例设置更改跟踪的开销。 如果要使用来处理实体实例并将这些更改保存到数据库,则不应禁用更改跟踪 SaveChanges()

查询的默认跟踪行为可由控制 QueryTrackingBehavior

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Decimal>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Double>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Int32>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Int64>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Decimal>>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Double>>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Int32>>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Int64>>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Single>>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

AverageAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Single>>, CancellationToken)

异步计算值序列的平均值,该序列是通过对输入序列的每个元素调用投影函数获取的。

ContainsAsync<TSource>(IQueryable<TSource>, TSource, CancellationToken)

通过使用默认的相等比较器,异步确定序列是否包含指定的元素。

CountAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式返回序列中满足条件的元素数量。

CountAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列中的元素数目。

FirstAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式返回序列中满足指定条件的第一个元素。

FirstAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列中的第一个元素。

FirstOrDefaultAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式返回序列中满足指定条件的第一个元素; 如果未找到这样的元素,则返回默认值。

FirstOrDefaultAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列中的第一个元素; 如果序列不包含任何元素,则返回默认值。

ForEachAsync<T>(IQueryable<T>, Action<T>, CancellationToken)

异步枚举查询结果,并对每个元素执行指定的操作。

IgnoreAutoIncludes<TEntity>(IQueryable<TEntity>)

指定当前实体框架 LINQ 查询不应应用任何模型级别的预先加载的导航。

IgnoreQueryFilters<TEntity>(IQueryable<TEntity>)

指定当前实体框架 LINQ 查询不应应用任何模型级别的实体查询筛选器。

Include<TEntity>(IQueryable<TEntity>, String)

指定要包含在查询结果中的相关实体。 要包含的导航属性是从要查询的实体类型 () 开始指定的 TEntity 。 其他要包含的导航属性可以追加,并以 "." 字符分隔。

Include<TEntity,TProperty>(IQueryable<TEntity>, Expression<Func<TEntity,TProperty>>)

指定要包含在查询结果中的相关实体。 要包含的导航属性是从要查询的实体类型 () 开始指定的 TEntity 。 如果希望根据要包含的类型的导航属性包含其他类型,则将调用链接到 ThenInclude<TEntity,TPreviousProperty,TProperty>(IIncludableQueryable<TEntity,IEnumerable<TPreviousProperty>>, Expression<Func<TPreviousProperty,TProperty>>) 此调用之后。

LastAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式返回序列中满足指定条件的最后一个元素。

LastAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列中的最后一个元素。

LastOrDefaultAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式返回序列中满足指定条件的最后一个元素; 如果未找到这样的元素,则返回默认值。

LastOrDefaultAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列中的最后一个元素; 如果序列不包含任何元素,则返回默认值。

Load<TSource>(IQueryable<TSource>)

枚举查询。 使用实体框架时,这会导致将查询结果加载到关联的上下文中。 这等效于调用 System.linq.enumerable.tolist,然后丢弃 (列表,而不会产生实际创建该列表) 的系统开销。

LoadAsync<TSource>(IQueryable<TSource>, CancellationToken)

异步枚举查询。 使用实体框架时,这会导致将查询结果加载到关联的上下文中。 这等效于调用 System.linq.enumerable.tolist,然后丢弃 (列表,而不会产生实际创建该列表) 的系统开销。

LongCountAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式返回 Int64 ,表示序列中满足条件的元素数量。

LongCountAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回 Int64 ,表示序列中的元素总数。

MaxAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列的最大值。

MaxAsync<TSource,TResult>(IQueryable<TSource>, Expression<Func<TSource,TResult>>, CancellationToken)

异步调用序列的每个元素上的投影函数并返回最大结果值。

MinAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列的最小值。

MinAsync<TSource,TResult>(IQueryable<TSource>, Expression<Func<TSource,TResult>>, CancellationToken)

异步调用序列的每个元素上的投影函数并返回最小结果值。

SingleAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式返回序列中满足指定条件的唯一元素; 如果有多个这样的元素存在,则会引发异常。

SingleAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列中的唯一元素; 如果序列中正好有一个元素,则会引发异常。

SingleOrDefaultAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, CancellationToken)

以异步方式返回序列中满足指定条件的唯一元素; 如果此类元素不存在,则返回默认值;如果有多个元素满足该条件,此方法将引发异常。

SingleOrDefaultAsync<TSource>(IQueryable<TSource>, CancellationToken)

以异步方式返回序列中的唯一元素; 如果序列为空,则返回默认值;如果序列中有多个元素,此方法将引发异常。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Decimal>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Double>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Int32>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Int64>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Decimal>>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Double>>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Int32>>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Int64>>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Nullable<Single>>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

SumAsync<TSource>(IQueryable<TSource>, Expression<Func<TSource,Single>>, CancellationToken)

异步计算值序列的总和,这些值是通过对输入序列的每个元素调用投影函数获取的。

TagWith<T>(IQueryable<T>, String)

将标记添加到与 EF LINQ 查询关联的标记的集合中。 标记是可以在查询管道中的不同点提供上下文跟踪信息的查询注释。

ToArrayAsync<TSource>(IQueryable<TSource>, CancellationToken)

IQueryable<T>通过异步枚举来从中创建数组。

ToDictionaryAsync<TSource,TKey>(IQueryable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>, CancellationToken)

Dictionary<TKey,TValue> IQueryable<T> 根据指定的键选择器函数和比较器,从创建一个。

ToDictionaryAsync<TSource,TKey>(IQueryable<TSource>, Func<TSource,TKey>, CancellationToken)

Dictionary<TKey,TValue> IQueryable<T> 根据指定的键选择器函数,从创建一个。

ToDictionaryAsync<TSource,TKey,TElement>(IQueryable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>, CancellationToken)

Dictionary<TKey,TValue> IQueryable<T> 根据指定的键选择器函数、比较器和元素选择器函数,从创建一个。

ToDictionaryAsync<TSource,TKey,TElement>(IQueryable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, CancellationToken)

Dictionary<TKey,TValue> IQueryable<T> 根据指定的键选择器和元素选择器函数,从创建一个。

ToListAsync<TSource>(IQueryable<TSource>, CancellationToken)

List<T> IQueryable<T> 通过异步枚举来从中创建一个。

GetInfrastructure<T>(IInfrastructure<T>)

从使用隐藏的属性获取值 IInfrastructure<T>

此方法通常由数据库提供程序 (和其他扩展) 使用。 它通常不在应用程序代码中使用。

IInfrastructure<T> 用于隐藏不应在应用程序代码中使用的属性,但可在数据库提供程序编写的扩展方法中使用。

CreateProxy<TEntity>(DbSet<TEntity>, Action<TEntity>, Object[])

如果已启用代理创建,则为实体类型创建代理实例。

CreateProxy<TEntity>(DbSet<TEntity>, Object[])

如果已启用代理创建,则为实体类型创建代理实例。

AsSingleQuery<TEntity>(IQueryable<TEntity>)

返回一个新查询,该查询配置为在单个数据库查询中加载查询结果中的集合。

此行为通常保证并发更新面临的结果一致性 (但详细信息可能因使用) 的数据库和事务隔离级别而异。 但是,这可能会导致查询加载多个相关集合时出现性能问题。

查询的默认查询拆分行为可由控制 UseQuerySplittingBehavior(QuerySplittingBehavior)

AsSplitQuery<TEntity>(IQueryable<TEntity>)

返回一个新查询,该查询配置为通过单独的数据库查询在查询结果中加载集合。

当查询加载多个集合时,此行为可显著提高性能。 但是,由于使用了单独的查询,因此在发生并发更新时,这可能会导致不一致的结果。 你能使用可序列化的事务或快照事务来缓解这种情况并通过拆分查询实现一致性,但这可能会带来其他性能成本并导致行为差异。

查询的默认查询拆分行为可由控制 UseQuerySplittingBehavior(QuerySplittingBehavior)

FromSql<TEntity>(IQueryable<TEntity>, RawSqlString, Object[])
已过时。

创建基于原始 SQL 查询的 LINQ 查询。

如果数据库提供程序支持在提供的 SQL 上撰写,则可以使用 LINQ 运算符在原始 SQL 查询的基础上进行编写- context.Blogs.FromSql("SELECT * FROM dbo.Blogs").OrderBy(b => b.Name).

与任何接受 SQL 的 API 一样,参数化任何用户输入来防范 SQL 注入式攻击非常重要。 可以在 SQL 查询字符串中包含参数占位符,然后提供参数值作为附加参数。 您提供的任何参数值都将自动转换为 DbParameter- context.Blogs.FromSql("SELECT * FROM [dbo].[SearchBlogs]({0})", userSuppliedSearchTerm).

此重载还接受 DbParameter 实例作为参数值。 这允许你在 SQL 查询字符串中使用命名参数- context.Blogs.FromSql("SELECT * FROM [dbo].[SearchBlogs]({@searchTerm})", new SqlParameter("@searchTerm", userSuppliedSearchTerm))

FromSql<TEntity>(IQueryable<TEntity>, FormattableString)
已过时。

基于表示 SQL 查询的内插字符串创建 LINQ 查询。

如果数据库提供程序支持在提供的 SQL 上撰写,则可以使用 LINQ 运算符在原始 SQL 查询的基础上进行编写- context.Blogs.FromSql("SELECT * FROM dbo.Blogs").OrderBy(b => b.Name).

与任何接受 SQL 的 API 一样,参数化任何用户输入来防范 SQL 注入式攻击非常重要。 可以在 SQL 查询字符串中包含内插参数占位符。 您提供的任何内插参数值将自动转换为 DbParameter- context.Blogs.FromSql($"SELECT * FROM [dbo].[SearchBlogs]({userSuppliedSearchTerm})").

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

创建基于原始 SQL 查询的 LINQ 查询。

如果数据库提供程序支持在提供的 SQL 上撰写,则可以使用 LINQ 运算符在原始 SQL 查询的基础上进行编写- context.Blogs.FromSql("SELECT * FROM dbo.Blogs").OrderBy(b => b.Name).

与任何接受 SQL 的 API 一样,参数化任何用户输入来防范 SQL 注入式攻击非常重要。 可以在 SQL 查询字符串中包含参数占位符,然后提供参数值作为附加参数。 您提供的任何参数值都将自动转换为 DbParameter- context.Blogs.FromSql("SELECT * FROM [dbo].[SearchBlogs]({0})", userSuppliedSearchTerm).

还可以构造 DbParameter 并将其作为参数值提供。 这允许你在 SQL 查询字符串中使用命名参数- context.Blogs.FromSql("SELECT * FROM [dbo].[SearchBlogs]({@searchTerm})", new SqlParameter("@searchTerm", userSuppliedSearchTerm))

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

基于表示 SQL 查询的内插字符串创建 LINQ 查询。

如果数据库提供程序支持在提供的 SQL 上撰写,则可以使用 LINQ 运算符在原始 SQL 查询的基础上进行编写:

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

与任何接受 SQL 的 API 一样,参数化任何用户输入来防范 SQL 注入式攻击非常重要。 可以在 SQL 查询字符串中包含内插参数占位符。 您提供的任何内插参数值将自动转换为 DbParameter:

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

创建基于原始 SQL 查询的 LINQ 查询。

如果数据库提供程序支持在提供的 SQL 上撰写,则可以使用 LINQ 运算符: context 在原始 SQL 查询的基础上进行撰写 。FromSqlRaw ( "SELECT * FROM dbo。博客 ") 。OrderBy (b = > b.Name)

与任何接受 SQL 的 API 一样,参数化任何用户输入来防范 SQL 注入式攻击非常重要。 可以在 SQL 查询字符串中包含参数占位符,然后提供参数值作为附加参数。 您提供的任何参数值都将自动转换为 DbParameter:

context.Blogs.FromSqlRaw("SELECT * FROM [dbo].[SearchBlogs]({0})", userSuppliedSearchTerm)

但是, 绝不会 向此方法传递未经过验证的用户提供值的串联或内插字符串 ($ "") 。 这样做可能会使应用程序受到 SQL 注入式攻击。 若要使用内插字符串语法,请考虑使用 FromSqlInterpolated<TEntity>(DbSet<TEntity>, FormattableString) 来创建参数。

此重载还接受 DbParameter 实例作为参数值。 这使您可以在 SQL 查询字符串中使用命名参数:

context.Blogs.FromSqlRaw("SELECT * FROM [dbo].[SearchBlogs]({@searchTerm})", new SqlParameter("@searchTerm", userSuppliedSearchTerm))

适用于