这是我第一次尝试使用NPOCO而我正在尝试阅读MS SQLEXPRESS数据库
来自NuGet的Connectionstring是
<connectionStrings>
<add name="TrackTime.Properties.Settings.connectionDB" connectionString="Data Source=ame-PC\SQLEXPRESS;Initial Catalog=TrackTime;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
代码是
db = new Database("TrackTime.Properties.Settings.connectionDB");
var tracks = db.Fetch<trackdatum>();
// List<trackdatum> tracks = db.Fetch<trackdatum>();
trackdatum class
using NPoco;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TrackTime
{
[TableName("trackdata")]
[PrimaryKey("trackdata_id")]
[ExplicitColumns]
public partial class trackdatum
{
[Column]
public string trackdata_customer { get; set; }
[Column]
public DateTime trackdata_date { get; set; }
[Column]
public DateTime trackdata_end { get; set; }
[Column]
public int trackdata_id { get; set; }
[Column]
public string trackdata_note { get; set; }
[Column]
public string trackdata_project { get; set; }
[Column]
public DateTime trackdata_start { get; set; }
[Column]
public string trackdata_task { get; set; }
[Column]
public TimeSpan trackdata_worked { get; set; }
}
}
在这一行
var tracks = db.Fetch<trackdatum>();
(我已经尝试了注释行也有相同的结果。)
我得到了这个例外
System.InvalidCastException was unhandled
HResult=-2147467262
Message=Object must implement IConvertible.
Source=mscorlib
StackTrace:
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at NPoco.PocoData.<>c__DisplayClass19.<GetConverter>b__14(Object src)
at poco_factory_0(IDataReader , trackdatum )
at NPoco.Database.<Query>d__7`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at NPoco.Database.Fetch[T](Sql sql)
at NPoco.Database.Fetch[T](String sql, Object[] args)
at NPoco.Database.Fetch[T]()
SNIP ......
为什么呢?以及如何修复它?
// Anders
答案 0 :(得分:3)
取决于您的堆栈跟踪,您的POCO
属性必须实现IConvertible
所不具备的TimeSpan
。
答案 1 :(得分:3)
您可能已经解决了问题,但问题可能是您从数据库中获取了数据类型为TIME
的列,并尝试将其映射到C#中数据类型为DATETIME
的属性类。如果是这样,请在C#代码中将数据类型更改为TIMESPAN
,我相信它应该可以正常工作。