比方說,我的網絡服務接收一些數據,如記錄ID和其他字段的值。在沒有先查詢的情況下插入或更新記錄?
有沒有一種方法可以插入或更新此數據庫記錄,如AddOrUpdate(TEntity)
方法做的,但沒有第一次查詢? (不幸的是AddOrUpdate(TEntity)
首先對選擇查詢數據庫。)
比方說,我的網絡服務接收一些數據,如記錄ID和其他字段的值。在沒有先查詢的情況下插入或更新記錄?
有沒有一種方法可以插入或更新此數據庫記錄,如AddOrUpdate(TEntity)
方法做的,但沒有第一次查詢? (不幸的是AddOrUpdate(TEntity)
首先對選擇查詢數據庫。)
號
這並不是實體框架是如何工作的。是的,SQL支持,但不是,EF不支持。要改變一個對象,你需要先擁有它,這是一個讀取操作。
Upserts - 要求測試確保數據存在與否。是的,並不是最優的,但事實就是這樣。
這是不正確的。嘗試在PK位置上沒有自動增量的表,並將新對象附加到具有已有PK和添加狀態的新上下文,這將導致ID不是唯一的異常,而在修改狀態下附加不存在pk的對象將導致到一個0行被影響的聲明。在插入或更新之前查詢數據對EF來說不是必要的,在這方面它是一個純粹的ORM。 – DevilSuichiro
你想如何更新記錄而不發現它? –
你可以做到這一點。您可以將您的對象附加到您的上下文並將其狀態設置爲已添加或已修改。當您保存更改時,將發送相應的INSERT/UPDATE語句。 – DevilSuichiro
是的。現在你怎麼知道狀態而不問?有可能在一個sql語句中有一些不是很複雜的編程,但是EF不能這樣做,並且不會生成「不能返回upsert樣式的命令」。我知道你想提出一個神奇的獨角獸解決方案 - 那個問題是:它不起作用。 – TomTom