2017-02-12 62 views
0

我有我的存儲用戶的最喜歡的水果表:刪除舊記錄的實體框架的db.BulkInsert()

CREATE TABLE UserFavouriteFruit (ID int IDENTITY(1, 1) PRIMARY KEY, Username varchar(20), Fruit nvarchar(20), IsDisabled bit DEFAULT(0)); 

INSERT INTO UserFavouriteFruit (Username, Fruit) VALUES ('Peter', 'Apple'); 
INSERT INTO UserFavouriteFruit (Username, Fruit) VALUES ('Peter', 'Pear'); 
INSERT INTO UserFavouriteFruit (Username, Fruit) VALUES ('Peter', 'Orange'); 
INSERT INTO UserFavouriteFruit (Username, Fruit) VALUES ('Paul', 'Water Melon'); 
INSERT INTO UserFavouriteFruit (Username, Fruit) VALUES ('Paul', 'Banana'); 
INSERT INTO UserFavouriteFruit (Username, Fruit) VALUES ('Lucy', 'Apple'); 
INSERT INTO UserFavouriteFruit (Username, Fruit) VALUES ('Lucy', 'Blueberry'); 
INSERT INTO UserFavouriteFruit (Username, Fruit) VALUES ('Mary', 'Strawberry'); 

我有一個調用第三方API來獲取更新的最喜歡的水果控制檯應用程序一些現有的和一些新的用戶。有些人有相同的選擇,有些會有所不同。當此應用程序調用實體框架的db.BulkInsert()時,所有新數據都會插入到我們的SQL Azure數據庫中。

請你讓我知道我怎麼可能建立的機制,這樣,當我插入新的條目,相關用戶的舊條目將有IsDisabled字段設置爲1?

感謝, WY

+0

爲什麼要保持舊值?爲什麼不更新? – ErikEJ

回答

1

MERGE是你所需要的。原生EF默認不支持此功能。

有一個擴展,可以幫助您與此http://www.zzzprojects.com/entity-framework/library/bulk-merge(不是免費的)。

如果您想保留它,您可以使用字符串構建器來構建將執行合併的T-SQL命令,或創建一個存儲過程,該存儲過程執行MERGE並通過用戶定義的類型傳遞數據集。我會建議去存儲過程路由,因爲它是直接的,最重要的是它是免費的。 :)