2017-01-10 3 views
-1

У меня есть странное поведение,Вверните модифицированный объект EntityFramework

Использование entityframwork 6 я получить список объектов, то я изменить внешний ключ затем вставьте список снова. однако результат заключается в том, что вставка выполняется, но внешний ключ не изменяется.

var clients = Uow.Clients.GetAll().where(x => x.zipCode= newZip); 
      var newClients = new List<Client>(); 
      foreach (var client in clients) 
      { 
       client.City = null; 
       client.cityId = newCityId; 
       newClients.Add(client); 
      } 
      Uow.Clients.AddMany(newClients); 
      Uow.Commit(); 

, если интересно, если я SaveChanges или если работает AddMany, ответ да, я использую эти функции много, и все работает отлично.

+0

При отладке в 'newClients' записей, каждая' cityId' является то, что он находится в '' клиентов, а не то, что вам явно его установить? Это действительный внешний ключ? –

+0

Вы никогда не используете 'newClients' после заполнения. Я не понимаю, как это будет работать. – David

+0

Вы добавляете новые сущности - свою первую проблему. Почему вы создаете 'newClients' и не используете? 'T.City' может быть нулевым? –

ответ

1

Что может происходить в том, что при выполнении поиска, ваши сущности связаны с контекстом через DbContext «s ChangeTracker, попробуйте сделать поиск отсоединен от DbContext с помощью AsNoTracking(), а затем изменить данные. Попробуйте это:

var clients = Uow.Clients.AsNoTracking().where(x => x.zipCode= newZip); 
var newClients = new List<Client>(); 
foreach (var client in clients) 
{ 
    client.City = null; 
    client.cityId = newCityId; 
    newClients.Add(client); 
} 

Uow.Clients.AddMany(client); 
Uow.Commit(); 

PS: Я выводя, что UOW является объектом DbContext

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