我有一张桌子可以存储我用户最喜欢的水果:
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
答案 0 :(得分:1)
MERGE
就是您所需要的。默认情况下,本机EF不支持此功能。
有一个扩展程序可以帮助您http://www.zzzprojects.com/entity-framework/library/bulk-merge(非免费)。
如果要保持其空闲,可以使用字符串构建器来构建将执行合并的T-SQL命令,或者创建执行MERGE
的存储过程并通过用户定义的类型传递数据集。我建议去存储过程路由,因为它是直接的,最重要的是它是免费的。 :)