[英]Entity Framework compare two data sets
我有一種情況需要比較Sql Server的兩組數據。 一組數據保存在一個表中(在我的Entity Framework模型中建模),但是另一組是存儲過程的結果集。 存儲過程返回的字段與表中的字段相同。
我以為以下方法會起作用:
using (var db = new MyDatabaseContext()) {
DbSet<MyTable> tableData = db.MyTables;
DbSet<MyTable> procData = db.Set<MyTable>();
procData.AddRange(db.MyTables.SqlQuery("exec dbo.MyProc").ToList();
if (tableData.Count != procData.Count) return false;
foreach (var data in tableData) {
if (!data.Equals(procData.Find(data.ID))) return false;
}
}
(注意: MyTable
類已經過編輯以實現IEquatable
並覆蓋Equals
因此它適合在字段級別進行比較)
該邏輯是,我相信db.Set<MyTable>
將創建一個任意的空集MyTable
S的我可以與所存儲的過程的結果填充,然后比較,為在表中的數據。
看來不過我誤解了這一點,作為檢查的內容tableData
和procData
在第一if
行顯示都包含完全相同的數據(我已經有意editted存儲過程,因此不會返回相同的數據作為表),使我相信db.Set<Table>
和db.MyTables
都引用相同的內容。
我該如何實現?
db.MyTables
具有與定義procData
的行中返回的定義相同的定義,並且最初包含相同的對象。
(我假設您的DbContext具有以下內容或等效的內容):
public DbSet<MyTable> MyTables { get; set; }
調用db.Set<MyTable>()
將為您提供一個與上下文中定義的屬性等效的集合。
如果僅在存儲過程中進行過濾,則tableData
包含所有記錄( procData
也是procData
)。 當您嘗試添加更多記錄(表面上與集合中包含的記錄相同)時, EF將嘗試添加狀態為“已添加”的記錄 。 事實是,您的比較並沒有測試狀態差異,並且EF可能不會考慮添加它們(如果正好配置了主鍵,EF可能會確定記錄已經存在,並且不需要更改狀態)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.