4

最初にエンティティ フレームワーク (バージョン 5) コードを使用して既存の sqlite3 データベース (system.data.sqlite 上) をマッピングする際に問題があります。

エンティティ クラスにマップする notes というデータベースにテーブルがあります。

public class Note
{   
    [Column("ZNAME")
    public string Name { get; set; }

    [Column("ZDATE")]
    public DateTime Date  { get; set; }

    [Column("ZNOTE")]
    public string Description { get; set; }
}

たとえば、データベースには2つの行があり、1つはZDATEフィールドが空で、もう1つは日付があります(例: 30/12/1899 21:00:05)。単体テストを行って、コレクション全体または空の日時フィールドを持つこの最初の行を取得しようとすると、「文字列は有効な DateTime として認識されませんでした」という悪名高い例外が発生します。他の行 (日付付き) のみを取得しようとすると、テストに合格します。

最初は、DateTime を文字列に変更すると問題が解決すると思っていましたが、同じ例外が発生します。DateTime? を使用してみましたが、同じエラーです。

System.Data.Sqlite がそのフィールドを日時に変換しようとするのは、おそらく私が間違っているようです (名前などのために)。

これは私の例外のスタックトレースです:

at System.DateTimeParse.ParseExactMultiple(String s, String[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style)
   at System.DateTime.ParseExact(String s, String[] formats, IFormatProvider provider, DateTimeStyles style)
   at System.Data.SQLite.SQLiteConvert.ToDateTime(String dateText, SQLiteDateFormats format, DateTimeKind kind)
   at System.Data.SQLite.SQLiteConvert.ToDateTime(String dateText)
   at System.Data.SQLite.SQLiteConvert.ToDateTime(IntPtr ptr, Int32 len)
   at System.Data.SQLite.SQLite3.GetDateTime(SQLiteStatement stmt, Int32 index)
   at System.Data.SQLite.SQLite3.GetValue(SQLiteStatement stmt, Int32 index, SQLiteType typ)
   at System.Data.SQLite.SQLiteDataReader.GetValue(Int32 i)
   at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetUntypedValueDefault(DbDataReader reader, Int32 ordinal)
   at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
   at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
   at lambda_method(Closure , Shaper )
   at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
   at lambda_method(Closure , Shaper )
   at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
   at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)

誰かがこの問題を解決する方法を教えてくれますか?

4

2 に答える 2

0

SQLiteでは、日付の形式は。である必要がありますyyyy-mm-dd

于 2012-11-13T14:39:26.727 に答える
0

You need to use DateTime? as the type

[Column("ZDATE")]
public DateTime? Date  { get; set; }

This will allow null values for the Date field

于 2012-11-13T09:00:39.267 に答える