实体框架中的日期时间转换

时间:2013-09-19 07:37:36

标签: c# linq entity-framework datetime

我正在尝试将datetime值插入数据库。我正在使用ASP.NET MVC 4和SQL服务器的实体框架。

using (dc = new GateEntities())
{     
   tblSite site = new tblSite();
   site.CalledInAt = DateTime.Parse("19/09/2013 00:29 AM", new CultureInfo("en- US", false));    
   dc.tblSites.Add(site);
   dc.SaveChanges();
}

当我尝试保存数据时,我收到错误:

  

“值'19 / 09/2013 00:29 AM'对CalledInAt无效。”

我也试过Convert.ToDateTime()但没有用。

这在我的本地计算机上运行良好。它不能仅在我的共享托管服务器上运行。

3 个答案:

答案 0 :(得分:0)

您列出的代码中有两个错误。

第一个(我猜是输入问题时引入的错误)​​是您的CultureInfo设置为'en- US',应该是'en-US'

另一个是美国日期格式化为月份和日期,并且在您的字符串中将设置为您设置一年中第19个月的日期。

以下代码适用于您的日期值...

DateTime.Parse("09/19/2013 00:29 AM", new System.Globalization.CultureInfo("en-US", false));

答案 1 :(得分:0)

异常是由EF的验证引起的,该验证发生在日期格式与字符串19/09/2013 00:29 AM不同的文化中。

在从用户输入为实体属性分配值时,最好的方法是确保您独立于UI文化。这意味着在UI(可能是视图模型)中,您必须捕获用户输入并将其转换为DateTime值。然后,您只需将DateTime值分配给site.CalledInAt

另一种选择是在视图模型中包含UI文化,并使用它在控制器中进行转换。

答案 2 :(得分:0)

我在web.config中设置了文化,它开始工作。

 <globalization uiCulture="en" culture="en-GB" />