簡體   English   中英

實體框架比較兩個數據集

[英]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的我可以與所存儲的過程的結果填充,然后比較,為在表中的數據。

看來不過我誤解了這一點,作為檢查的內容tableDataprocData在第一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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM