gpt4 book ai didi

entity-framework - Entity Framework 和 System.Data.Sqlite 日期时间问题

转载 作者:行者123 更新时间:2023-12-03 16:36:06 25 4
gpt4 key购买 nike

我首先使用实体​​框架(版本 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 行,其中一个 ZDATE 字段为空,另一个有一些日期(例如:30/12/1899 21:00:05)。
当我对其进行单元测试时,并尝试获取整个集合或第一行的日期时间字段为空时,我得到了臭名昭著的异常:“字符串未被识别为有效的日期时间。”试图只获取其他行(带日期),我的测试通过了。

起初我认为将 DateTime 更改为 string 会解决问题,但它给了我同样的异常(exception)。我尝试使用 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)

有人能给我一些如何解决这个问题的见解。

最佳答案

您需要使用日期时间吗?作为类型

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

这将允许 Date 字段的空值

关于entity-framework - Entity Framework 和 System.Data.Sqlite 日期时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com