3

我想将新的 Sqldatetime2数据类型用于事件记录(因为标准日期时间的精度低于System.DateTime导致存储数据丢失的精度)但是当我生成代码时,sqlmetal.exe我收到以下警告:

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

如果我将列定义更改为datetime2(2)但 2 位精度低于System.DateTime可以处理的精度,警告就会消失,对吗?为什么?我怎样才能抑制警告?

4

2 回答 2

4

您可能会忽略该警告。我检查了 sqlmetal 的来源(使用 Reflector)并发现了这个:

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

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

于 2011-03-30T17:56:30.600 回答
1

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

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

于 2011-03-30T04:14:34.493 回答