2017-02-12 49 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并通过用户定义的类型传递数据集。我会建议去存储过程路由,因为它是直接的,最重要的是它是免费的。 :)