我想在使用實體框架時使用SQL OUTPUT clause來保存數據庫記錄的歷史記錄。爲此,EF需要爲DELETE語句生成以下示例。實體框架和SQL Server OUTPUT子句
Delete From table1
output deleted.*, 'user name', getdate() into table1_hist
Where field = 1234;
表table1_hist具有相同的列表1,增加兩列來存儲誰做了操作的用戶的名稱,當它發生了。然而,EF似乎沒有辦法支持這個SQL Server的條款,所以我迷失在如何實現它。
我看着EF的源代碼,並DELETE命令是內部靜態方法(GenerateDeleteSql in System.Data.Entity.SqlServer.SqlGen.DmlSqlGenerator class)
中創建的,所以我不能擴展類添加我想要的行爲。它看起來像我將不得不基於現有的代碼重寫SQL Server提供程序,但這是我想避免...
所以,我的問題是,如果有另一個選項來做到這一點(一個擴展,例如)還是我必須重寫這個提供者?
謝謝。
另一種選擇是重寫'DbContext.SaveChanges'並攔截那裏的刪除。在開源項目中更改代碼總是非常棘手。您將繼續適應未來版本,因爲我認爲它不會被接受爲代碼庫中的受支持功能。 –