如何使用 Entity Framework Core 5.0.1 将数据表从 c# 类传递到 MSSQL Server 存储过程。

Hui Liu-MSFT 46,961 信誉分 Microsoft 供应商
2024-03-14T05:40:18.14+00:00

我有一个用 .Net Framework 编写的数据导入应用程序,用于迁移到 .Net Core。应用程序使用 c# 类将数据表作为输入参数传递给 MSSQL 服务器存储过程。EF6 中的代码工作正常,粘贴在下面。

    public void InsertExcelPrescriptions(int excelMasterId, DataTable dt)
    {

        var p1 = new SqlParameter { ParameterName = "IN_intExcelMasterId", Value = excelMasterId };
        var p2 = new SqlParameter { ParameterName = "IN_tabRecords"
            , Value = dt, SqlDbType = SqlDbType.Structured, TypeName = "dbo.HDS2_PrescriptionType" };

        string sql = string.Format("dbo.HDS2_spInsertPrescriptionsFromExcel @{0}, @{1}", p1.ParameterName, p2.ParameterName);

        var db = new Db();
        db.Database.ExecuteSqlCommand(sql, p1, p2);
        return;
    }

其中 Db 继承自 DbContext。

我试图在 Entity Framework Core 中模拟这种行为,但没有成功。我尝试使用 FromSqlInterpolated,但代码不明白输入参数是数据表而不是字符串或数字等。

我还尝试运行原始 SQL 命令

 using (var command = new Db().Database.GetDbConnection().CreateCommand())
        {
           ....
        }

尽管这没有错误,但 MSSQL Server 数据库表中未插入任何内容。

我只想通过将数据表作为用户定义的表类型传递给存储过程,将一些行插入到数据库表中。

Note:此问题总结整理于 : How to pass datatable from c# class to MSSQL Server stored procedure using Entity Framework Core 5.0.1.

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
57 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 41,271 信誉分 Microsoft 供应商
    2024-03-14T09:04:02.49+00:00

    在 EntityFrameworkCore 中,有两种执行存储过程的方法:

    1. 从数据库中查询记录 - FromSqlRaw()。
    2. 在数据库上执行命令(通常为 DML)- ExecuteSqlRaw() 或可等待的 ExecuteSqlRawAsync()。 该方法采用两个参数:一个 SQL 字符串和一系列要与此 SQL 语句一起传递的参数。 这是 Jimbo Jones 提供的一个代码示例,可能对您有所帮助。

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助