如何通过实体框架将空值传递给存储过程?

Posted

技术标签:

【中文标题】如何通过实体框架将空值传递给存储过程?【英文标题】:How to pass null values into stored procedure via Entity Framework? 【发布时间】:2016-01-09 21:22:30 【问题描述】:

我正在使用带有实体框架的 ASP.NET MVC 4 应用程序。

我想有条件地传递空值,假设如果将值传递给DeptID,那么它应该列出仅传递给DeptID的值,如果传递DeptID = NULL,那么它应该是所有部门。

我通过检查DeptID 编写了一个过程,它返回所需的输出(如果DeptIDnull,则返回所有行)。

但问题是当我想通过以下实体框架代码传递空值时,它不起作用。

IdleTicketsChecker.Data.Test11Entities objModel = new Data.Test11Entities();
List<GeResult_Result> objTicketList =ExecuteCustomStoredProc<GetIdleTicketsByMinutes_Result>("GeResult", " @DeptID",
new SqlParameter("DeptID", DeptID)).ToList();

知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

如果DeptID 为NULL,那么您需要将DBNull.Value 传递给您的SqlParameter

试试这个:

IdleTicketsChecker.Data.Test11Entities objModel = new Data.Test11Entities();

// I'm *assuming* that DeptID is defined as an "int" - if not, adapt as needed
SqlParameter paramDeptId = new SqlParameter("DeptID", SqlDbType.Int);

if (DeptID == null)
    paramDeptId.Value = DBType.Null;
else
    paramDeptId.Value = DeptID;

List<GeResult_Result> objTicketList = ExecuteCustomStoredProc<GetIdleTicketsByMinutes_Result>("GeResult", "@DeptID", paramDeptId).ToList();

【讨论】:

以上是关于如何通过实体框架将空值传递给存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 vb.net 中日期的空值传递给 sql 存储过程?

通过数据库上下文将空 DataTable 传递给 SQL Server 存储过程

将空值传递给 SVG 路径(使用 d3.js)以抑制丢失数据

Kotlin - 如何将空值传递给片段 newInstance 方法?

在实体框架数据库优先方法中,如何从存储过程返回多个结果集?

如何将空值传递给 WebAPI 中的可空类型