Linq2Sql中的System.DateTime和Sql datetime2(使用sqlmetal)

时间:2011-03-04 06:58:22

标签: sql linq-to-sql datetime types sqlmetal

我想利用新的Sql datetime2数据类型进行事件记录(因为标准日期时间的精度低于System.DateTime导致存储时数据丢失)但是当我使用{{1生成代码时我得到以下警告:

  

db.dbml(98):警告DBML1008:   DbType'DateTime2(7)之间的映射   NOT NULL'并输入'System.DateTime'   在'事件'类型的'CreatedOn'列中   加载时可能会导致数据丢失   数据库。

如果我将列定义更改为sqlmetal.exe,但2位数的精度低于datetime2(2)可以处理,则警告消失,对吧?为什么?我该如何压制警告?

2 个答案:

答案 0 :(得分:4)

您可能只是忽略该警告。我已经检查了sqlmetal的源代码(使用Reflector),发现了这个:

case SqlDbType.DateTime2:
if (scale <= 2)
  return Compatibility.Compatible;
else
  return Compatibility.DataLossFromDatabase;

但是,从示例数据库查询datetime2字段会返回整个7位精度。

答案 1 :(得分:1)

SQLMetal只是一个生成dbml文件的工具,因此它对运行时行为没有影响。但作为生成工具,它可能不知道新的数据类型。

您是否尝试使用XML编辑器自行编辑DBML以查看是否丢失了精度?