EF Core 不原生支持 SQL Server 内存优化表,仅将其视为普通表处理;需手动在数据库中创建并配置内存优化表,EF Core 仅负责映射已存在的表结构,且不启用内存优化特性或生成专用查询提示。
EF Core 本身不原生支持 SQL Server 的内存优化表(Memory-Optimized Tables)的自动映射或特殊配置。它把内存优化表当作普通表来处理——只要表结构符合 EF Core 的约定(如主键、列类型兼容),就能

WITH (SNAPSHOT) 或 NOLOCK 等针对内存表优化的提示。
EF Core 不参与创建或配置内存优化表。你必须在 SQL Server 中手动创建,并启用内存优化功能:
ALTER DATABASE [YourDB] SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
MEMORY_OPTIMIZED = ON 和 DURABILITY(如 SCHEMA_AND_DATA)映射到已存在的内存优化表时,需注意以下几点:
[Key] 或 Fluent API 配置geography、xml、varchar(max) 等可能被拒绝;优先用 varchar(n)、int、datetime2 等基础类型Include 可能失效或引发运行时错误假设你有一个已建好的内存优化表 Orders_MemOpt:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.ToTable("Orders_MemOpt") // 显式指定表名
.HasKey(e => e.Id);
// 关闭级联删除(内存表不支持外键)
modelBuilder.Entity()
.HasOne(e => e.Customer)
.WithMany()
.HasForeignKey(e => e.CustomerId)
.OnDelete(DeleteBehavior.NoAction); // 必须设为 NoAction
}
即使映射成功,要真正发挥内存优化表优势,还需配合应用层优化:
AsNoTracking() + 投影(Select)减少数据传输量Contains() 模糊查询(易导致全表扫描,失去内存表速度优势)ExecuteUpdate/ExecuteDelete(EF Core 7+),绕过变更跟踪基本上就这些。EF Core 对内存优化表是“能用,但不感知”——它不提供专用 API,也不校验兼容性,一切依赖你提前在数据库中正确建模和约束。用得好,性能飞跃;配错了,运行时报错才暴露问题。