Я не уверен, что вы пытаетесь сделать здесь.Главным образом это утверждение смущает меня:
Куча этих больших объектов должна быть вставлена в БД, но с изменением только одного свойства.
Как можно новый объект (т.е. вставленный) будет изменяющимся ?Если он новый, что можно изменить?
У всех сущностей в вашей модели есть EntityKey , который обычно является первичным ключом на стороне базы данных.
Что я думаю, что вы делаете .AddObject
, когда вы должны делать .Attach
.
Вот как вы ВСТАВЛЯЕТЕ новый объект:
var newFoo = new Foo();
ctx.Foos.AddObject(newFoo);
newFoo.SaveChanges();
Вот как вы ОБНОВЛЯЕТЕ существующий объект:
var existingFoo = ctx.Foos.SingleOrDefault(x => x.Id == 1); // or however you want to get it
existingFoo.Name = "Changed foo";
newFoo.SaveChanges();
Или, если у вас есть отсоединенный объект:
var existingFoo = new Foo();
existingFoo.Name = "Foo name";
ctx.Foos.Attach(existingFoo);
ctx.SaveChanges();
Итак, я думаю в вашем примере ваш код должен просто выглядеть следующим образом:
objContext.TheLargeObjects.Attach(newObject);
objContext.SaveChanges();
В двух словах, если у вас есть сущность, которая вам положительна, уже существует в базе данных, и вы создали эту сущностьвручную используйте .Attach
.Если у вас есть новый шлепающий новый объект, используйте .AddObject
.
Однако, чтобы быть в безопасности - вы могли бы пойти и снова получить объект , внести необходимые изменения, а затем сделать .SaveChanges()
.
.Attach
обычно используется в сценариях без сохранения состояния, таких как веб-сайты, где объекты не сохраняются в графе между запросами, поэтому для внесения изменений нам нужно .Attach
или получить объект сноваперед внесением изменений.
Надеюсь, это прояснит для вас.