2016-05-18 2 views
0

IBM DB2にデータがあります。これは、EntityFrameworkを使用してそのデータを取得することです。 私は1つの列にTIMESTAMP値をdd.MM.yyyy hh:mm:ss.ffffffの形式で持ち、そのテーブルの主キーです。EntityFrameworkを使用しているときに、DB2からのタイムスタンプデータが正確でない

DB2データベースからデータを取得するとき、タイムスタンプの一部の時間が失われます。他の側で 私はそのIDの文字列プロパティを持つエンティティを持っている:

public string Id { get; set; } 

これは、特定の商人を返します方法です。タイムスタンプは一意であるため、IDは一意だからです。しかし、データが取得され、時間部分が失われたとき、私は同じIdを持つ9人の商人を得て、もちろん例外です。 Iは、ID用のDateTime型を使用しようとした

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; 
} 

、唯一の違いは、それが全体の時間の一部に代えて、最後の3つの数字をカットしたことでした。

誰でも同じ問題がありましたか? DB2を使用するときに、誰が正確なデータを取得するのですか?

答えて

1

プライマリキーとしてのタイムスタンプ..いい考えはありません。現在の時刻に基づいて、あなたに19桁の長い番号を与える

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

:あなたはしかし、商人のIDを作成するためのあなたの基礎としての時間を使いたいならば、あなたはこれを行うことができます。問題は、PCの時計がリセットされた場合や、別のコンピュータ、異なるタイムゾーンなどでプログラムを実行した場合、この戦略は失敗することです。

テーブル内の行を一意に識別できるものが必要な場合は、GUIDを使用します。これらは非常にユニークであり、2つの異なるプロセスが同じプロセスを作る可能性は、ゼロに非常に近いです。

関連する問題