2017-02-12 3 views
0

У меня есть таблица, которая хранит любимый плод моих пользователей:Удалить старые записи на db.BulkInsert Entity Framework (в)

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() Entity Framework, все новые данные вставляются в нашу базу данных SQL Azure.

Не могли бы вы сообщить мне, как я могу настроить механизм, чтобы при вставке новых записей старые записи соответствующих пользователей будут иметь поле IsDisabled, установленное в 1?

Спасибо, WY

+0

Зачем хранить старые значения? Почему бы не ОБНОВИТЬ? – ErikEJ

ответ

1

MERGE является то, что вам нужно. Native EF по умолчанию не поддерживает эту функцию.

Существует расширение, которое может помочь вам с этим http://www.zzzprojects.com/entity-framework/library/bulk-merge (не является бесплатным).

Если вы хотите сохранить его бесплатно, вы можете использовать построитель строк для создания команды T-SQL, которая будет выполнять слияние или создать хранимую процедуру, которая делает MERGE и передает набор данных через определенный пользователем тип. Я предлагаю перейти на маршрут хранимой процедуры, потому что это прямолинейно и, самое главное, БЕСПЛАТНО. :)

Смежные вопросы