3

イベントログに新しいSqlデータ型を利用したいのですがdatetime2(標準の日時は保存時にデータが失われるよりも精度が低いためSystem.DateTime)、コードを生成するとsqlmetal.exe次の警告が表示されます:

db.dbml(98) : 警告 DBML1008: DbType 'DateTime2(7) NOT NULL' と Type 'Event' の Column 'CreatedOn' の Type 'System.DateTime' の間のマッピングにより、データベースからロードするときにデータが失われる可能性があります。

列の定義を変更すると、警告は消えますdatetime2(2)が、2 桁の精度は処理できるよりも低いSystem.DateTimeですよね? なんで?警告を抑制するにはどうすればよいですか?

4

2 に答える 2

4

その警告を無視するだけかもしれません。(Reflector を使用して) sqlmetal のソースを確認したところ、次のことがわかりました。

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 に答える