EntityFramework Oracle C# - 无法将Timestamp与Date中的子句进行比较

时间:2017-10-26 05:55:14

标签: c# .net oracle timestamp entity-framework-6

我正在使用Oracle数据库和Nuget包

  • Oracle ManagedDataAccess v12.2.1100
  • Oracle.ManagedDataAccess.EntityFramework v12.2.1100
  • EntityFramework v6.0.0

在Oracle数据库中,有一个使用Timestamp(6)定义的字段。 当我首先使用数据库时,它会转换为DateTime。 到目前为止一切都很好。

现在我要将当前时间戳插入表中:

DateTime dateTime = DateTime.Now;
//only 3 parts of milisec
DateTime zeitStempel = dateTime.AddTicks(-1 * dateTime.Ticks % 10000);

using (Entities ctx = new Entities(DBConnect.BuildConnectionString(_bedien, "ModelJobLog")))
{
    JOB job = (from e in ctx.JOB
               where e.PROGNAME == progName
               select e).FirstOrDefault();

    JOBLAEUFE lauf = new JOBLAEUFE();
    lauf.JOBID = job.JOBID;
    lauf.JOB = job;
    lauf.LETZTSTART = zeitStempel;

    ctx.JOBLAEUFE.Add(lauf);

    ctx.SaveChanges();
}

一切都很好,在我的领域我有价值: “26.10.17 07:39:53,381000000”

现在我记得这个dateTime(变量zeitStempel),现在我要在这个表中搜索它。 所以我仍然有相同的dateTime对象,现在搜索数据库中的值,并希望在另一个字段中设置当前的dateTime:

using (Entities ctx = new Entities(DBConnect.BuildConnectionString(_bedien, "ModelJobLog")))
{
    try
    {
        Oracle.ManagedDataAccess.Types.OracleTimeStamp tmstmp = zeitStempel;
        JOBLAEUFE lauf = (from e in ctx.JOBLAEUFE
                          join j in ctx.JOB on e.JOBID equals j.JOBID
                          where j.PROGNAME == progName
                          &&( e.LETZTSTART.Equals(zeitStempel)
                              || (e.LETZTSTART.Year == zeitStempel.Year
                              && e.LETZTSTART.Month == zeitStempel.Month
                              && e.LETZTSTART.Day == zeitStempel.Day
                              && e.LETZTSTART.Hour == zeitStempel.Hour
                              && e.LETZTSTART.Minute == zeitStempel.Minute
                              && e.LETZTSTART.Second == zeitStempel.Second
                              ))
                          select e).FirstOrDefault();

        lauf.LETZTEND = DateTime.Now;
        ctx.SaveChanges();
    }
    .
    .
    .
}

如果我在where子句中与比较秒,我永远不会得到DB的值。但是,如果我将Seconds从where子句中删除,他会找到数据库记录。但当然,单独一分钟就不够精确。

两者,e.LETZTSTART和zeitStempel来自DateTime,如果我检查调试,所有属性都是相同的。

亲切的问候,

0 个答案:

没有答案
相关问题