zoukankan      html  css  js  c++  java
  • EntityFramework中的datetime2异常的解决

    (转)

     

         最近使用.net的Entity Framework构建网站数据层,给一个实体的DATETIME类型的属性赋值时 突然莫名奇妙显示有
    一个类型不匹配的异常如下:

         System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值。

         这让我非常费解,C#里貌似也没有datetime2类型啊,只有一个System.DateTime,我之前一直用也没有问题。
    查阅网上的资料,看到有位大哥提出的原因是:

         sqlServer2008中提供datetime2类型的数据(比datetime更精确),而用entity framework4会默认的把C#中的
    System.DateTime类转化成sqlServer2008中的datetime2类型,而你的数据库中的元素的属性设的是datetime类型,
    把datetime2转化成datetime系统会认为会丢失数据,所以会报错。(感觉这TM是设计缺陷吧!这是熟么默认设置啊!) 

          而这位大哥提出的解决办法是把你的edmx中的ProviderManifestToken设置成2005,这样entityframework就会默
    认转化成datetime了。

    个人感觉这样做比较有风险,有关datetime2的具体问题我还没深究,留到之后有时间研究吧,一个简洁的比较莫名
    奇妙的解决办法是:在C#中用new DateTime(year,month,day,hour,minute,second) 来赋值限制精度。

    例:会报错的写法:
         Activity.StartTime=DateTime.Now;
         
         DateTime time=new DateTime();
         time=.......;//一些赋值操作
         Activity.StartTime=time;

         不会报错的写法:
         Activity.StartTime=new DateTime(2011,4,22,22,42,00);

    有关原因我也没有调查,诡异的事件背后一定有道理,有时间再好好看看,恩。 

    —————————————————————————————————————————————————————————————————————————————————————————————————————————

    充分说明,设计数据库的时候,尽量少用时间字段!!!

  • 相关阅读:
    .NET实现之(WebService数据提供程序)
    站内搜索(主要技术点:Luncene.Net搜索引擎核心,Log4Net:日志,定时框架:quartz.Net,Jquery,Json,AJAX)
    非常棒的 ASP.NET Web Forms 和 ASP.NET MVC 免费培训视频!
    NET实现之(简易ORM)
    Razor4Orchard v1.2
    MVC和三层 【转】热闹
    .NET简谈平台大局观
    Trigger4Orchard
    步步为营 .NET 代码重构学习笔记 一、为何要代码重构
    步步为营 .NET 代码重构学习笔记 三、内联方法(Inline Method)
  • 原文地址:https://www.cnblogs.com/SzeCheng/p/5072250.html
Copyright © 2011-2022 走看看