【新手】SiverLight WCF RIA 更新数据提示DateTime2数据类型转换到DateTime数据类型出错

 

自学silverlight,参照微软的WCF RIA例子做了一个演示,结果在添加新记录时,碰到一个奇怪的错误。

根据捕获的异常,提示是数据转换时发生的错误,但是没有更详细的信息,提示是那里出的错误。根据提示信息,怀疑是WCF RIA写入数据库时发生的错误,

使用SQL2012中附加上了微软的示例数据库AdventureWorks2012,查看Employee表段结构。

表结构中,ModifiedDate字段是datetime数据类型,会不会是这样出了错呢?设置断点跟踪执行的添加操作的实体对象。

结果发现,对象属性ModifiedDate 的值为DateTime数据默认值{0001/1/1 0:00:00} 。而datetime2是sql2008中增

加的新字段,支持时间范围从0001年01月01日到9999年12月31日,而数据库中ModifedDate字段则是datetime数据类

型,只能支持从1753年1月1日9999年12月31日

适当修改一下代码

 

NewEmployee = new Employee();
NewEmployee.JobTitle = "T";
NewEmployee.ModifiedDate = DateTime.Now;

 

创建对象时,将当前时间赋值给他。

保存然后再执行,成功。问题解决。

总结,WCF RIA生成的实体对象并不能100%适应数据库对应的数据类型,所以在使用时,还是注意数据库字段中的类型属性,值的范围这个细节。以免发生这类错误。

PS:另外微软的示例中存在一个小问题,DataForm提交更新时,最好判断DataForm.ValidateItem(),检查所有数据验证是否都已经通过,如果没有通过,会导致

CommitEdit()方法也一样不能成功,从而导致提交失败,所以最好在提交时,进行判断 if (DataForm.ValidateItem() && DataForm.CommitEdit())来判断所有

相关操作是否都已经通过。

posted @ 2013-10-31 21:49  PAK43L41  阅读(102)  评论(0)    收藏  举报