C# 带日期参数的Oracle存储过程的EF执行损失小时/分钟

C# 带日期参数的Oracle存储过程的EF执行损失小时/分钟,c#,oracle,entity-framework,C#,Oracle,Entity Framework,我有一个使用日期作为输入的简单存储过程: CREATE OR REPLACE PROCEDURE delete_time(myTime DATE) IS BEGIN DELETE FROM mytable WHERE time = myTime; END; / 这已使用函数导入添加到我的EDMX中,映射的类型是SSDL端的Date和CSDL端的DateTime 问题是,当我使用DateTime从.NET运行该过程时,时间和分钟会在某个地方丢失: DateTime dt = new DateTi

我有一个使用日期作为输入的简单存储过程:

CREATE OR REPLACE PROCEDURE delete_time(myTime DATE) IS
BEGIN
DELETE FROM mytable WHERE time = myTime;
END;
/
这已使用函数导入添加到我的EDMX中,映射的类型是SSDL端的Date和CSDL端的DateTime

问题是,当我使用DateTime从.NET运行该过程时,时间和分钟会在某个地方丢失:

DateTime dt = new DateTime(2013, 4, 3, 12, 15, 00);
var timeParam = new ObjectParameter("myTime", dt) : 
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("DeleteTime", timeParam);
这将运行存储过程,但删除时间为03-APR-2013 00:00:00而不是03-APR-2013 12:15:00的行

Oracle客户端中是否存在一些bug(我使用的是11.2.0.3.20)?还是我做错了上面的事

我还尝试使用时间戳作为过程的输入类型,但调用函数时出现以下错误: ORA-01830:日期格式图片在转换整个输入字符串之前结束


有什么想法吗?

我在尝试使用实体框架执行Oracle过程时遇到了这个问题。因此,我确实希望这样传递一个日期参数:

var objects = _dbContext.Database.SqlQuery<MyObject>("BEGIN My_procedure(to_date('01/01/2016', 'dd/mm/yyyy  hh24:mi:ss')); END;").ToList();
var objects=_dbContext.Database.SqlQuery(“开始我的_过程(截止日期('01/01/2016','dd/mm/yyyy hh24:mi:ss'));结束;”).ToList();

时间参数的edm类型是什么?timeParam.ParameterType显示了什么?只是一个猜测-参数是否会作为字符串发送到oracle?如果是这样,oracle将根据nls_date_格式进行转换,该格式可能是
DD-MON-YYYY
。您可以尝试(只是为了检查)将存储过程更改为
DELETE FROM mytable,其中time=to_date(myTime,'DD-MON-YYYY hh24:mi:ss')
,param类型更改为VARCHAR2(这不是正确的解决方案-只是检查)参数类型为{Name=“DateTime”FullName=“System.DateTime”}。我不知道如何检查EDM类型,它不是EDMX中看到的SSDL类型吗,正如我前面所说的“日期”?如果有机会,我会尝试使用VARCHAR2建议…我尝试使用VARCHAR2作为输入参数类型,但在到_日期转换期间时间部分仍然丢失。然而,如果我在我的过程开始时设置了NLS_DATE_格式,那么我就可以让它工作,但前提是我一直使用VARCHAR2来传递日期时间-尽管这感觉像是一个解决方法太远了。