2014-02-03 1 views
0

У меня есть более старый код, который был запущен на Entity Framework 4.0. Я обновил модель до последней и самой большой (v6), и при этом мне пришлось внести несколько незначительных изменений в то, как вещи создаются/вводятся. Я перешел от модели Legacy ObjectContext к модели поколения T4.Обновление до свойства навигации Не задание ключа Forgein

У меня были некоторые тесты, и, глядя на результат, и большинство все выглядит великолепно. Но у меня есть тест или два, где я обновляю или добавляю ссылку на объект сущности, а затем проверяю, что внешний ключ обновлен правильно ... и длинный рассказ короткий, его нет.

Например: Принести адрес и его не хватает его владелец, поэтому я взять ApplicationUser объект и установить его на Address.User собственности. Исторически это изменило бы значение Address.User_ID на правильное значение, соответствующее ApplicationUser, но его больше не нужно делать.

Любые идеи о том, почему? Есть ли какие-то настройки в новом мире EF, которые мне не хватает?

Address.User = ApplicationUser; 
Address.User_ID (is not updated) 

Update: Если я позволяю объект быть сохранен, он правильно хранится в базе данных с соответствующим значением FK.

+1

Когда вы упорствуем 'Address' назад к базы данных, столбец UserId для 'Address' имеет значение« ApplicationUserId »? –

+0

Это хороший вопрос, он не дает моей проверки, поэтому он никогда не попадает в базу данных. я могу попытаться удалить проверку и посмотреть, работает ли она по-прежнему. я опубликую обновление. – YetAnotherDeveloper

+0

@lll, если я обойдусь с моей проверкой, он ведет себя правильно, его просто не обновляет FK в режиме реального времени. – YetAnotherDeveloper

ответ

1

Почему бы вам не установить FK Navigation property вместо установки фактического объекта.

Вместо того, чтобы делать это, так как вы просто сохраняющиеся в базу данных и не собирается ничего делать в памяти

Address.User = ApplicationUser; 
Address.User_ID (is not updated) 

к этому

Address.User_ID ApplicationUser.Id; 
+0

Я мог бы это сделать, но мне пришлось бы переписать приложение, которое в то время не было желательным. – YetAnotherDeveloper

+0

Это потому, что вы изменились с 'ObjectContext' на' T4 templates'. Это был «ObjectContext», который выполняет эту работу для вас при настройке FK. Думаю, вам нужно обновить свой тест. –