2016-11-24 2 views
0

sqliteデータベースを使用しています。このデータベース内には、作成タイムスタンプを格納するTEXT型のCREATED_ONという名前のフィールドを含むテーブルがあります。 私のC#コードでは、フィールドの型はDATETIMEです。エンティティフレームワークでデータベースエントリが壊れていないかどうかを確認する方法

私はDBSET経由ですべてのエントリを取得しようとする場合、通常、すべてがうまく

return context.dbset.ToList(); 

残念ながら、時には壊れた値(文字列DATETIMEにparasableない)CREATED_ONに保存されている私のコードに問題があるの作品フィールド(現時点で私はなぜこれが起こるかわからない)。私は、エラーメッセージの後を受けるすべてのエントリを取得しようとした場合:

を「『FileInfos』オン 『CREATED_ON』プロパティは 『可能System.String』の値に設定することができませんでしたあなたが非にこのプロパティを設定する必要があります。 CREATED_ONフィールドは、すべてのエントリを取得するときDATETIMEに解析可能かそうでない値が含まれるかどうかを確認する可能性がある場合には型「のSystem.DateTime」。 "の-null値は

私の質問はありますか? foreachループでさえ助けにならないのは、すべてのエントリが指定されたクラスで以前に解析されようとしているからです。

EDIT:

はいフィールドはストレートDATETIME

FileInfosクラスで
builder.Entity<FileInfos>(). 
    Property(i => i.CreatedOn). 
    HasColumnName("CREATED_ON"); 

にマップされます。

public DateTime CreatedOn 
{ 
    get { return CreatedOnInternal.ToUniversalTime(); } 
    set { CreatedOnInternal = value.ToUniversalTime(); } 
} 
+0

例外は、データベース列をdatetimeプロパティに直接マッピングしたことを示しています。関与するクラスとマッピングの関連部分を確認できますか? –

+1

これはEFが処理できないものです。文字列を文字列にマップする必要があります。あなたのエンティティの中で、文字列の値をマップされていないDateTimeプロパティに解析しようとすることができます。 –

答えて

0

あなたはDateTime.TryParse(入力、アウト変数を使用することができます正しい場合に出力する)

例:

string input = "2000-02-02"; 
    DateTime dateTime; 
    if (DateTime.TryParse(input, out dateTime)) 
    { 
     //only print if the parsing was successful 
     Console.WriteLine(dateTime); 
    } 
関連する問題