使用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数据服务或模型中的错误?
答案 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数据服务中的一个错误。至少我在这个解决方案中找到了一种使用并发的方法。