2015-04-08 3 views
0

Таблица Contact имеет *→1 отношение к таблице Location via Location ID ключ. Следующий код, сохраняющий все Contact данных, кроме Location. Что я делаю неправильно? EF 6.0.0.0, MVC 5.2.3.0, но EF 4.4 и MVC 4 также вызывает эту ошибку.EF не сохраняет иностранные данные

using(MyEntities me = new MyEntities()) 
{ 
    Contact ct = me.Contact.SingleOrDefault(x=>x.User.UserID == WebSecurity.CurrentUserId); 
    ct.Title = "sometitle"; //assignment and saving works 
    ct.Location = me.Location.SingleOrDefault(x=>x.Location_ID == 19); //only assignment works 
    me.SaveChanges(); 
} 

Я отключил прямое использование внешних ключей при создании модели EDMX из базы данных из-за некоторых ошибок.


Обновление: как Contact и Location имеют отношение к User по UserID. Может ли это быть источником проблемы?

+0

Можете ли вы поделиться свободно или атрибута на основе кода отображения вместе с вашими определениями сущностей? – Igor

ответ

2

Необходимо указать, что уровень местоположения должен быть включен в контекст для сохранения в конце.

Так просто добавить .INCLUDE («Location») в вашем коде, как этот

using(MyEntities me = new MyEntities()) 
{ 
    Contact ct = me.Contact.Include("Location").SingleOrDefault(x=>x.User.UserID == WebSecurity.CurrentUserId); 
    ct.Titile = "sometitle"; //assignment and saving works 
    ct.Location = me.Location.SingleOrDefault(x=>x.Location_ID == 19); //only assignment works 
    me.SaveChanges(); 
} 
+0

Хороший, но не помогает. –

+0

Данные о местоположении всегда пропущены? Как правило, этого достаточно, чтобы контекст мог сохранить подтип вашего объекта. Что в итоге ? – D4rkTiger

+0

Спасибо, Темный Тигр. Я использую '.Include()' в нескольких местах, из которых поступают данные и проблема решена. Без 'Include()' У меня есть дело с инициализацией вручную внутри контекстно-открытого окна, и оно вызывает некоторые ошибки, что в итоге становится ** ОДНОЙ БОЛЬШОЙ ОЧЕРЕДНОЙ ОШИБКОЙ **. Это действительно любопытно, но два года назад у меня также были проблемы, подобные этому, и решили их с помощью 'Include()'. Человеческий разум ненадежен. Еще раз спасибо. –

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