删除实体框架的旧记录db.BulkInsert()

时间:2017-02-12 18:43:44

标签: .net entity-framework azure-sql-database

我有一张桌子可以存储我用户最喜欢的水果:

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来获取某些现有用户和一些新用户的最新收藏。有些人有相同的选择,有些人会有所不同。当此应用程序调用Entity Framework的db.BulkInsert()时,所有新数据都将插入到我们的SQL Azure数据库中。

请您告诉我如何设置机制,以便在插入新条目时,相关用户的旧条目将IsDisabled字段设置为1?

谢谢, WY

1 个答案:

答案 0 :(得分:1)

MERGE就是您所需要的。默认情况下,本机EF不支持此功能。

有一个扩展程序可以帮助您http://www.zzzprojects.com/entity-framework/library/bulk-merge(非免费)。

如果要保持其空闲,可以使用字符串构建器来构建将执行合并的T-SQL命令,或者创建执行MERGE的存储过程并通过用户定义的类型传递数据集。我建议去存储过程路由,因为它是直接的,最重要的是它是免费的。 :)