Я также использую .net 3.5 и Entity Framework 3.5 (не может обновиться до последней версии).SaveChanges on Entity Framework 3.5 сохраняет неизменные объекты (дублирует их в базе данных)
Когда я использую EF, чтобы сохранить новый объект в базе данных, все ссылки на объекты дублированы даже с состоянием «Без изменений» и ID> 0.
Вот немного кода:
public long Insert(CarDTO carDTO)
{
Car car = Mapper.Map<CarDTO, Car>(carDTO);
using (var context = new Entities())
{
car.Wheel =
context
.Wheels
.FirstOrDefault(item => item.ID == carDTO.Wheel.ID);
context.AddToCar(car);
context.SaveChanges();
}
}
Как вы можете видеть, я создаю новый объект типа Car, но когда выполняется SaveChanges, он также создает новую копию в базе данных ссылочного лица Wheel.
Может кто-нибудь помочь мне понять, почему это происходит? Как я уже сказал, entity Wheel имеет состояние Unchanged и имеет EntityID, поэтому он не должен обновляться или дублироваться в базе данных, поскольку это был новый объект.
использование Sql Server Profiler, чтобы увидеть, что на самом деле отправить в базу данных (и когда). Я также не знаю, что такое Mapper, и если он вносит свой вклад в проблему - посмотрите, сколько объектов у вас есть в контексте перед SaveChanges(). Другой вопрос: если вы сопоставляете свои операции CUD с хранимыми процедурами, и если да, то что там происходит. – Pawel