的DateTime
值不在Nullable<DateTime>
將默認爲DateTime.Min
當你Insert
或Update
。因此,您應該將它們設置爲所需的值。
手動設置:
可以通過指定你想成爲DateTime.Now
db.Insert(new Person { Id = 1, FirstName = "John", CreatedDate = DateTime.Now });
使用OrmLite的插入/更新過濾器值的INSERT或UPDATE語句中做到這一點:
不過我懷疑你希望避免在插入或更新語句中自己執行此操作,這通常是使用OrmLite的插入/更新過濾器功能來處理的,可用於設置記錄創建和修改時間。
從the documentation:
public interface IAudit
{
DateTime CreatedDate { get; set; }
DateTime ModifiedDate { get; set; }
string ModifiedBy { get; set; }
}
OrmLiteConfig.InsertFilter = (dbCmd, row) => {
var auditRow = row as IAudit;
if (auditRow != null)
auditRow.CreatedDate = auditRow.ModifiedDate = DateTime.UtcNow;
};
OrmLiteConfig.UpdateFilter = (dbCmd, row) => {
var auditRow = row as IAudit;
if (auditRow != null)
auditRow.ModifiedDate = DateTime.UtcNow;
};
然後在你的數據庫表類:
public class MyTable : IAudit
{
// Your properties
...
// The audit properties
DateTime CreatedDate { get; set; }
DateTime ModifiedDate { get; set; }
string ModifiedBy { get; set; }
}
當你插入/更新MyTable
然後過濾器會自動更新的時間戳。
感謝@Scott的詳細答案!不幸的是,它仍然不符合我的具體要求。服務消費者(主要是winforms)將遍佈各大洲 - 我不能相信技術上不那麼複雜的最終用戶(主要是低級醫療技術人員)保持系統時間同步。 – masroore 2014-09-25 04:47:55
我認爲ormlite應該實現對SQL文字的支持 - 我已經搜索了文檔,但未能找到任何線索..無論如何,我已經在DB端實現了觸發器 - 但我希望能夠在客戶端找到更優雅的解決方案。感謝您提供有關OrmLite審覈過濾器的詳細信息! – masroore 2014-09-25 04:53:52
是否有一個原因,我不會在我的POCO的構造函數中設置它,而不必在插入和更新時處理濾鏡? – Ellesedil 2016-07-20 23:14:02