EF,如何保存/检索TimeSpan作为其他数据类型?

时间:2013-08-27 18:32:33

标签: c# .net entity-framework sql-server-ce timespan

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

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

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

2 个答案:

答案 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时。那里不需要转换或技巧。不确定其他数据库。