我想利用新的Sql datetime2
数据类型进行事件记录(因为标准日期时间的精度低于System.DateTime
导致存储时数据丢失)但是当我使用{{1生成代码时我得到以下警告:
db.dbml(98):警告DBML1008: DbType'DateTime2(7)之间的映射 NOT NULL'并输入'System.DateTime' 在'事件'类型的'CreatedOn'列中 加载时可能会导致数据丢失 数据库。
如果我将列定义更改为sqlmetal.exe
,但2位数的精度低于datetime2(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以查看是否丢失了精度?