Сохранение Id с помощью Entity Framework

370
28 января 2017, 08:12

У меня есть EF 6.x, несколько сущностей и с полем Id у каждой (типа Guid), которые сконфигурены как

Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

Я получаю данные при синхронизации с сервером и мне требуется сохранять модели с серверными идентификаторами у себя в базе.
Но, к сожалению, единственный метод,который я нашел - это создания нового контекста, но этот метод мне крайне нежелательный.
Так же нашел варианты, где предлагают поставить DatabaseGeneratedOption.None и задать дефолтное значение для филда, но оно тоже не подходит, т.к. primary key не может быть null.

P.S. SET IDENTITY_INSERT тоже не подходит.

Спасибо за любые ответы!

Answer 1

Вы пытаетесь решать две задачи разными способами одновременно - потому и не получается. С одной стороны вам надо чтобы Id генерировались в базе при создании новой записи (потому и DatabaseGeneratedOption.Identity) - с другой, вам надо чтобы вы могли их задавать сами (потому и DatabaseGeneratedOption.None).

Так вот - Entity Framework так не умеет.

Вариант с Identity исключает вставку своих значений в принципе. EF даже не пытается передавать их в БД (потому и IDENTITY_INSERT не срабатывает).

Поэтому вам нужен вариант с None. А чтобы база данных не жаловалась что "primary key не может быть null" - не забывайте заполнять это поле! Когда вы делаете первичный ключ с атрибутом DatabaseGeneratedOption.None - вы сообщаете EF что вы всегда будете указывать его значение. Вот и создавайте его через Guid.NewGuid().

READ ALSO
Proxy Laravel, как?

Proxy Laravel, как?

От пользователя приходит запрос с адресом (uri) и дополнительными даннымиВ моих задачах стоит отправить get запрос на данный адрес с использованием...

403
Перегрузка методов PHP

Перегрузка методов PHP

Создать класс с несколькими конструкторами, вызывать конструкторы в зависимости от переданных параметров

391
Вставка в плеер ссылку из БД?

Вставка в плеер ссылку из БД?

Как можно в плеер на странице, например FlowPlayer, вставить ссылку из БД, сайт на php?

390
mail() отправляет пустое письмо

mail() отправляет пустое письмо

Есть код отправки почты с возможностью прикрепления файла Все прекрасно работало на поддомене, когда перенес на основной, код перестал работатьТо...

735