将DateFormat从EU更改为US entityFramework

时间:2014-02-27 10:34:32

标签: c# sql-server entity-framework datetime

您好我DateTime格式SQL server格式没问题。 我有一个与SQL Server 2012相关联的应用。 我需要在App中使用EU Dateformat。 SQL Server以EU格式保存DateTime 证明:

enter image description here

但是,当我允许用户以欧盟格式输入日期时EntityFramework会抛出Model not valid 我认为C#默认DateTimeformat是US 如何修改此代码以允许用户输入EU格式日期并将其传递给DB而不会出现任何问题: 我的模特:

namespace magazyn.Models
{
    using System;
    using System.Collections.Generic;

    public partial class DeviceInstance
    {
        public int Id { get; set; }
        public int DeviceId { get; set; }
        public string SerialNo { get; set; }
        public System.DateTime CreationDate { get; set; }

        public virtual Device Device { get; set; }
        public virtual DeviceUsage DeviceUsage { get; set; }
    }
}

1 个答案:

答案 0 :(得分:4)

  

SQL Server以EU格式保存DateTime

不,它没有。 (至少,如果它在数据库中的适当列类型中,则不会。)它以更紧凑的二进制格式保存它 - 至少我假设如此。这是一个实现细节。从根本上说,重点是它是一个日期/时间值。您应始终根据DateTime值(或DateTimeOffset或其他)与数据库进行通信,而不是字符串。这样,您就不会参与转换。您在SQL Explorer中看到的内容(或者您用来查询它的任何内容)只是数据库中内容的字符串表示。这与数据库中的值不同。

以同样的方式,您可以要求数据库显示十进制或十六进制数字 - 这不会更改基本数值。

您需要在应用程序中对用户输入的数据进行适当的转换,然后再次将数据库中的任何数据显示给用户,但不需要使用字符串表示超出“用户边界”。

您应该尝试使绝大多数代码使用非基于字符串的表示。尽可能早地将输入数据转换为“自然”表示,并尽可能晚地将输出数据转换为特定于文化的字符串表示。