SQLCe不支持TimeSpan,所以我需要以其他方式保存它。是否可以在某处定义默认转换,如DbContext,或者我是否需要在存储库中手动处理?我不喜欢因此而改变我的实体类。
顺便说一句,我只保存了TimeSpan的< 24小时。
如果有一些巧妙的技巧,例子会很棒。
答案 0 :(得分:6)
我知道你说你不想修改你的实体,但是如果你先使用代码,那么通过修改你的实体就可以很简单了:)
您可以定义未映射到数据库的属性,该属性使用另一个属性作为其后备存储。在此示例中,TickCount将保存在数据库中,但其他所有内容都可以访问Span,将TickCount公开为TimeSpan结构。
public long TickCount { get; set; }
[NotMapped]
public TimeSpan Span {
get {
return new TimeSpan(TickCount);
}
set {
TickCount = value.Ticks;
}
}
答案 1 :(得分:-1)
好吧,这似乎基本上不可能。
TimeSpan
属性必须标记为NotMapped
,或者标记为Ignore
(然后根据史蒂夫的回答保存)。
至少那是我现在的理解。
EF
不支持类型映射或类型转换..
https://stackoverflow.com/a/12053328
顺便说一下,NHibernate
默认情况下将TimeSpan
映射到整数,使用SqLite
时。那里不需要转换或技巧。不确定其他数据库。