使用EntityFramework时,来自DB2的时间戳数据不准确

时间:2016-05-18 11:39:21

标签: c# entity-framework db2

我在IBM DB2中有数据,我想要做的是使用EntityFramework获取数据。 我有一个列具有以下格式的TIMESTAMP值:dd.MM.yyyy hh:mm:ss.ffffff并且它是该表中的主键。

当我从DB2数据库获取数据时,部分时间戳丢失了。 另一方面,我的实体具有该Id的字符串属性:

public string Id { get; set; }

这是一种返回特定商家的方法。预计只有一个,因为时间戳也称为Ids是唯一的。但是,当数据被拉动时,当时间部分丢失时,我会得到9个具有相同ID但当然例外的商家。

MerchantEntity IMerchantRepository.GetMerchantByRegistrationNumber(string companyRegistrationNumber)
{
     var db = merchantDataContextProvider.GetMerchantContext();
     var merchant = db.Merchants.Include(x => x.MerchantProperty).
         SingleOrDefault(x => x.MerchantProperty.CompanyRegistrationNumber == companyRegistrationNumber);
     return merchant;
}

我曾尝试使用Id的DateTime类型,唯一的区别是它切割了最后3个数字,而不是整个时间部分。

有没有人有相同或类似的问题?谁在使用DB2时获得准确的数据?

1 个答案:

答案 0 :(得分:1)

时间戳作为主键..不是一个好主意。如果您确实希望使用时间作为创建商家ID的基础,则可以执行以下操作:

var newId = string.format("{0:D19}", DateTime.Now.Ticks)

根据当前时间给出一个19位长的数字。问题当然是如果PC上的时钟重置,或者你在不同的计算机,不同的时区等上运行程序,这个策略将失败。

如果您需要在表格中唯一标识行的内容,请使用GUID' s。它们非常独特,并且两个不同过程制作相同过程的机会非常接近于零