我需要使用我的SQL Server上的時鐘寫一個時間到我的一個表,所以我想我只是使用GETDATE()。問題是由於INSTEAD OF觸發器,我得到一個錯誤。當另一列是標識列時,是否有方法將一列設置爲GETDATE()?LINQ to SQL與INSTEAD OF觸發器和一個標識列
這是LINQ到SQL:
internal void LogProcessPoint(WorkflowCreated workflowCreated, int processCode)
{
ProcessLoggingRecord processLoggingRecord = new ProcessLoggingRecord()
{
ProcessCode = processCode,
SubId = workflowCreated.SubId,
EventTime = DateTime.Now // I don't care what this is. SQL Server will use GETDATE() instead.
};
this.Database.Add<ProcessLoggingRecord>(processLoggingRecord);
}
這是表。 EventTime是我想要的GETDATE()。我不希望該列爲空。
這裏是觸發:
ALTER TRIGGER [Master].[ProcessLoggingEventTimeTrigger]
ON [Master].[ProcessLogging]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
SET IDENTITY_INSERT [Master].[ProcessLogging] ON;
INSERT INTO ProcessLogging (ProcessLoggingId, ProcessCode, SubId, EventTime, LastModifiedUser)
SELECT ProcessLoggingId, ProcessCode, SubId, GETDATE(), LastModifiedUser FROM inserted
SET IDENTITY_INSERT [Master].[ProcessLogging] OFF;
END
沒有進入所有我已經試過了變化,這最後的嘗試產生此錯誤:
出現InvalidOperationException 會員自動同步失敗。對於成員在插入後進行AutoSynced,該類型必須具有自動生成的標識或插入後未由數據庫修改的鍵。
我可以從我的實體中刪除EventTime,但我不想這樣做。如果它已經消失,那麼在INSERT和GETDATE()期間將會使用NULL。
有沒有一種方法可以簡單地在INSERT的EventTime列上使用GETDATE()?
注:我不想使用C#的DateTime.Now,原因有二:1。 其中一個刀片由SQL Server本身產生的(從另一個存儲過程) 2.時間可以在不同的機器不同,我想知道我的流程發生的速度。
完美的工作!謝謝! – 2012-03-29 17:58:41