Entity Framework
直接操作

直接访问

⚠️

该文档可能已过期。

LinqSharp.EFCore 为数据操作提供了直接访问函数:

  • 清空表(TRUNCATE TABLE
  • 批量导入(BULK INSERT

支持情况:

Direct ActionFirebirdIBMMySqlOraclePostgreSQLSqlServer
TRUNCATE TABLE✔️✔️✔️✔️✔️✔️
BULK INSERT🔘🔘✔️🔘🔘✔️
Direct ActionJetSqliteSqlServer
Compact35
SqlServer
Compact40
TRUNCATE TABLE✔️✔️✔️✔️
BULK INSERT

清空表(TRUNCATE TABLE)

清空表(TRUNCATE TABLE)能够快速移除表中所有行记录。

SqlServer 使用示例:

using var context = ApplicationDbContext.UseSqlServer();
using (context.BeginDirectScope())
{
    context.BulkTestModels.Truncate();
}

执行 SQL:

TRUNCATE TABLE [BulkTestModels];

批量导入(BULK INSERT)

批量导入(BULK INSERT)允许使用一个源数据批量写入到数据表。

数据库支持情况:

支持库数据库
LinqSharp.EFCore.MySql✔️ MySql
LinqSharp.EFCore.SqlServer✔️ Jet ✔️ SqlServer

SqlServer 使用示例:

引用库:

dotnet add package LinqSharp.EFCore.SqlServer

LinqSharpEFRegister 中注册工具类:

LinqSharpEFRegister.RegisterBulkCopyEngine(
    DatabaseProviderName.SqlServer, new SqlServerBulkCopyEngine());

使用批量导入(BulkInsert):

using var context = ApplicationDbContext.UseSqlServer();
var models = new BulkTestModel[100000].Let(i => new BulkTestModel
{
    Id = Guid.NewGuid(),
    Code = Path.GetRandomFileName(),
    Name = Path.GetRandomFileName().Bytes().For(BytesFlow.Base58),
});
 
using (context.BeginDirectScope())
{
    context.BulkTestModels.Truncate();      // Truncate table
    context.BulkTestModels.BulkInsert(models);
}

注意BULK INSERT 不同于 INSERT INTO,如遇到错误数据(键冲突或违反约束等)无法导入会直接跳过,且不抛出错误提示,您可能需要编写额外代码进行检查。