【发布时间】:2017-01-03 07:00:19
【问题描述】:
我正在尝试将表传递给存储过程以进行批量插入更新。我在数据库中为表创建了一个自定义类型,还使用表参数(自定义类型)创建了一个过程。
但是,当我在 Entity Framework 中更新模型时,它不会生成用于传递表参数的正确代码。
以下是我的存储过程的声明:
CREATE PROCEDURE [dbo].[TimeClock_UpdateTimeClockData]
@dateTimeFrom date,
@dateTimeTo date,
@employeeEarnings EmployeeEarningsTable readonly
AS
BEGIN
--- insert/update operations
END
这是实体框架生成的代码:
public virtual int TimeClock_UpdateTimeClockData(Nullable<System.DateTime> dateTimeFrom, Nullable<System.DateTime> dateTimeTo)
{
var dateTimeFromParameter = dateTimeFrom.HasValue ?
new SqlParameter("dateTimeFrom", dateTimeFrom) :
new SqlParameter("dateTimeFrom", typeof(System.DateTime));
var dateTimeToParameter = dateTimeTo.HasValue ?
new SqlParameter("dateTimeTo", dateTimeTo) :
new SqlParameter("dateTimeTo", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery("TimeClock_UpdateTimeClockData @dateTimeFrom,@dateTimeTo", dateTimeFromParameter, dateTimeToParameter);
}
它只是忽略了表值参数。
实体框架是否有任何解决方法可以将表传递给过程?
或者有没有其他方法可以将多条记录传递给存储过程?我知道 Xml 参数,但我想避免这种情况,因为我想传递更大的数据集并且不想引起任何性能问题。
【问题讨论】:
-
尝试使用
ExecuteSqlCommand或 'SqlQuery' 而不是 ExecuteStoreQuery,只需更改即可。
标签: c# sql-server entity-framework