2011-03-04 39 views
3

我想利用新的Sql datetime2數據類型進行事件日誌記錄(因爲標準日期時間的精度比System.DateTime更低,導致數據在存儲時丟失),但是當我生成代碼與sqlmetal.exe我得到以下警告:Linq2Sql中的System.DateTime和Sql datetime2(使用sqlmetal)

db.dbml(98):警告DBML1008:的DbType 'DATETIME2(7) NOT NULL' 和類型 'System.DateTime的' 在列 'CreatedOn' 之間 映射類型'事件' 可能會導致從數據庫加載 時丟失數據。

,報警信號消失,如果我我的列定義更改爲datetime2(2)但2位精度比System.DateTime下可以處理,對不對?爲什麼?我怎樣才能壓制警告?

+0

你有沒有安裝.NET Framework 3.5 SP1?我做的是 – manji 2011-03-24 20:33:30

+0

。但主要目標是.net4 – UserControl 2011-03-24 21:57:32

回答

4

您可能會忽略該警告。我檢查sqlmetal(使用反射鏡)的來源,發現這一點:

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

然而,從樣本數據庫查詢DATETIME2場返回整個7位精度。

+0

有沒有辦法壓制它? – UserControl 2011-03-31 07:19:12

+0

我沒有看到任何方法來壓制它(至少不是在當前版本中,3.5.30729.1) – jaraics 2011-03-31 08:28:42

1

SQLMetal只是一個生成dbml文件的工具,因此它對運行時行爲沒有影響。但作爲一個生成工具,它可能不知道新的數據類型。

您是否嘗試過使用XML編輯器自己編輯DBML以查看是否失去精度?