WCF数据服务在展开时从DateTime中删除毫秒

时间:2015-02-16 14:41:13

标签: entity-framework odata wcf-data-services

使用WCF Data Services 5.6时,我遇到了一些奇怪的行为。 在我的例子中,我有表,其中1列设置为Concurrency = Fixed,此列保存数据库中的日期时间字段,每次编辑行时都会更新。 如果我只检索实体 - 此列具有正确的值,以毫秒为单位。但如果我做映射 - 毫秒被删除。

这是一个问题:

=============================================== =====================

void Main()
{
    var b = from p in TABLE1 where p.ID == 100 select p;
    b.Dump();
}

在这种情况下的请求是:http://xxxx/Data.svc/TABLE1(100M) 从服务返回的数据是:

<d:COL1 m:type="Edm.DateTime">2015-02-16T12:13:52.972</d:COL1>

=============================================== =====================

如您所见,这里的时间以毫秒为单位返回 - .972 在其他情况下:

void Main()
{

    var tmp = from p in TABLE1 where p.ID == 100 select 
    new TABLE1() 
    {
        ID=p.ID,
        COL1=p.COL1
    };
    var a1 = tmp.ToList();
    a1.Dump();
}

在这种情况下请求是:http://xxxx/Data.svc/TABLE1(100M)?$ select = ID,COL1

  <d:COL1 m:type="Edm.DateTime">2015-02-16T12:13:52</d:COL1>

=============================================== =====================

没有毫秒返回时间。

有人有同样的问题吗?可能是WCF数据服务或模型中的错误?

1 个答案:

答案 0 :(得分:0)

好吧,好像我找到了答案,或者至少可以避免这个问题。 首先,我从框架中跟踪生成的SQL,我在第一种情况下看到,我正在获取SQL

 SELECT ID, COL1 FROM TABLE1

在第二种情况下,我得到了

 SELECT ID, CAST( COL1 AS DATETIME) FROM TABLE1

导致问题。

然后我尝试将EF更新到版本6,将WCF数据服务更新到5.6.3版, Oracle ODP到最新版本,尝试使用Oracle托管驱动程序......没有任何成功。

然后我用表定义玩了一下,我看到我的col1在数据库中的类型为TIMESTAMP,模型中的DateTime被定义为NOT NULL。 如果我从数据库定义中删除它,我得到正确的值毫秒。

所以,这可能是Oracle驱动程序中的一个错误,但可能这是WCF数据服务中的一个错误。至少我在这个解决方案中找到了一种使用并发的方法。