1

SQLCe 不支持 TimeSpan,所以我需要以其他方式保存它。是否可以在某处定义默认转换,例如在 DbContext 中,还是我需要在存储库中手动处理?我不喜欢仅仅因为这个而改变我的实体类。

顺便说一句,我只保存 < 24 小时的 TimeSpan。

如果有一些巧妙的技巧,例子会很棒。

4

3 回答 3

6

I know you say you don't want to modify your entities, but if you're using code first this would be pretty simple to do by modifying your entities :)

You could define a property that isn't mapped into the database, that uses another property as its backing store. In this example, TickCount would get saved in the database, but everything else could access Span which exposes TickCount as a TimeSpan struct.

public long TickCount { get; set; }

[NotMapped]
public TimeSpan Span { 
    get { 
        return new TimeSpan(TickCount); 
    } 
    set { 
        TickCount = value.Ticks; 
    } 
}
于 2013-08-27T18:45:24.573 回答
0

很旧,但如果有人需要这个,我已经克隆和修改 System.Data.SQLite 以支持 TimeSpan 属性(映射到 sqlite TIME 列)你可以在https://github.com/arielflashner/System找到源代码.Data.SQLite

于 2017-11-28T07:27:04.027 回答
-2

好吧,看来这基本上是不可能的。

TimeSpan属性必须标记为NotMapped,或 fluent (Ignore然后根据史蒂夫的回答保存)。至少这是我现在的理解。

EF不支持类型映射或类型转换.. https://stackoverflow.com/a/12053328

顺便说一句,默认情况下NHibernate映射TimeSpan到整数,当使用SqLite. 那里不需要转换或技巧。不确定其他数据库。

于 2013-08-27T21:26:19.060 回答