C# 实体框架将字符串映射到datetime列

C# 实体框架将字符串映射到datetime列,c#,.net,sql,entity-framework,C#,.net,Sql,Entity Framework,我有一个类,它具有一些以任意格式表示日期的字符串属性。这些需要保留为字符串属性。有没有一种方法,使用fluentapi或其他什么东西,来指示这些列类型应该是datetime。然后我可以告诉EF以某种方式封送数据 我可以使用: HasColumnType("datetime") 如果是这样,我将如何处理编组 示例类: public Class SomePOCO{ public String SomeTimeInWierdFormat { get; set; } public S

我有一个类,它具有一些以任意格式表示日期的字符串属性。这些需要保留为字符串属性。有没有一种方法,使用fluentapi或其他什么东西,来指示这些列类型应该是datetime。然后我可以告诉EF以某种方式封送数据

我可以使用:

HasColumnType("datetime")
如果是这样,我将如何处理编组

示例类:

public Class SomePOCO{

    public String SomeTimeInWierdFormat { get; set; }
    public String SomeOtherTimeInWierdFormat { get; set; }
    public String SomeString{ get; set; }
}

是否有一种字符串格式可以将这些字符串转换为允许我使用HasColumnType(“datetime”)而无需任何抱怨?

您可以使用只读属性将您的
日期时间
显示为格式化的
字符串
。这是很有用的,因为您仍然可以使用这种方法,在以您选择的方式公开数据的同时,使属性正确映射到数据库。也许是这样的:

public Class SomePOCO{

    public DateTime DateTimeColumn { get; set; }
    public string DateTimeColumnAsString { get { return this.DateTimeColumn.ToString(); } }

}

为什么要将属性保留为
string
?就这么说吧,我无法控制它。那么为什么不能将它们作为字符串存储在DB中,然后在输出时将它们转换为日期呢?必须有更好的方法。“我想要一个日期时间来存储一个字符串”是愚蠢的/荒谬的。如果它需要是应用程序的某个其他层的字符串,我建议您在实体上保留它作为日期时间,并使用DTO/ViewModel/Anything将其设置为字符串。它可能应该标记为未映射,以便EF不会持久化该字符串。既然
DateTimeColumnString
没有setter,那么这是必要的吗?似乎应该有一个约定,但我必须尝试看看。