[英]EF change tracker and stored procedures
我的 model 使用的是數據庫優先的方法,其中不導入存儲過程,只存在於數據庫中。
我需要通過ExecuteSqlCommand
執行我的存儲過程,我想跟蹤這些更改,但不幸的是,通過執行存儲過程(插入、刪除)修改的實體未在ChangeTracker().Entries
中列出。
我試過了:
context.Database.BeginTransaction();
var result = context.Database.ExecuteSqlCommand(storedProcedureName, parameters);
var trackedEntities = context.ChangeTracker
.Entries()
.Where(x => x.State != EntityState.Unchanged)
.ToList();
context.Database.CurrentTransaction.Commit();
我也嘗試過挖掘當前交易,但實際上我沒有什么可以使用的。 下一個想法是強制我的實體通過 linq 查詢未修改的 state 進入更改跟蹤器,然后運行存儲過程,但它似乎沒有被跟蹤。
我沒主意了。 這是在測試完成后回滾存儲過程所做的更改所必需的。
試試Database.SqlQuery<TElement>(String, Object[])
:
創建一個原始的 SQL 查詢,它將返回給定泛型類型的元素。 該類型可以是具有與從查詢返回的列的名稱相匹配的屬性的任何類型,也可以是簡單的原始類型。 該類型不必是實體類型。 即使返回的 object 類型是實體類型,上下文也永遠不會跟蹤此查詢的結果。
或者DbSet<TEntity>.SqlQuery(String, Object[])
:
創建一個原始的 SQL 查詢,它將返回該集合中的實體。 默認情況下,返回的實體由上下文跟蹤;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.