2013-10-09 2 views
0

Я унаследовал некоторые таблицы базы данных и Entity Framework, где у меня есть следующие таблицы:Entity Framework Как обновить детскую таблицу

Table Person 
Id (Primary Key) 
Sex 
CarId (Foreign Key) 

Table Car 
Id (Primary Key) 
Color 
ManufacturerId (Foreign Key) 

Table Manufacturer 
Id (Primary Key) 
Name 

Я использую работу кадров Entity для извлечения данных в Pocos (без проблем). Теперь я хотел бы внести изменения в машину одного человека и сохранить обратно в БД. Я занимаюсь этим. у меня есть:

Car car= new Car { Color = "gray", Manufacturer = manufacturer}; 
_dbContext.Cars.Add(car); 
_dbContext.SaveChanges(); 
person.Car = car; 
_dbContext.Entry(person).State = EntityState.Modified; 
_dbContext.SaveChanges(); 

Никакие исключения не выбрасываются, и появится новый автомобиль в базе данных, но человек строка не изменяется, чтобы указать на новый автомобиль. Может ли кто-нибудь сказать мне, что происходит, и как я должен обновляться? Я новичок в Entity Framework.

Кстати, я пробовал другие комбинации, такие как пытается

person.CarId = car.Id. 

Это приводит к исключению:

реляционного нарушение ограничения целостности произошло: Свойство значения, которые определяют ссылочные ограничения не соответствуют между главными и зависимыми объектами в отношении.

Я не могу найти простой пример, чтобы прояснить ситуацию.

ответ

1

_dbContext.Entry (person) .State = EntityState.Modified; Это сообщает инфраструктуре сущности, что вся запись обновлена.

Таким образом, вы можете попробовать этот подход:

Car car= new Car { Color = "gray", Manufacturer = manufacturer}; 
_dbContext.Cars.Add(car); 
_dbContext.Person.Attach(person); 
person.Car = car; 
_dbContext.SaveChanges(); 

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

или вы можете позвонить:

_dbContext.DetectChanges(); 
_dbContext.SaveChanges(); 

это должно помочь тоже.

I think this is very good article about Change Tracking with POCO in EF

+0

Большое спасибо. Ваши последние две строки _dbContext.DetextChanges() и _dbContext.SaveChanges() решили это для меня. Я не понял, что в коде есть строка: _dbContext.Configuration.AutoDetectChangesEnabled = false, что, я думаю, объясняет, почему помогает DetectChanges. Отмечено как ответ. – Dave

+0

Какая версия Entity Framework вы, ребята, используете? У моего dbContext нет метода DetectChanges(). –

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