2014-09-30 2 views
0

У меня есть приложение Silverlight. Это операция Invoke (Открыть Риа услуг - WCF Ria служба открытой версии источника) с Entity Framework 6.Объекты с неизмененными объектами в Entity Framework 6

public List<VaultAmount> GetCurrentVaultAmounts(Guid vaultId) 
    { 
     return this.DbContext.VaultAmounts 
      .Include(v => v.VaultAmountQuantities) 
      .Include(v => v.VaultCurrency) 
      .Include(v => v.Vault) 
      .Include(v => v.VaultAmountQuantities.Select(vaq => vaq.VaultCurrency)) 
      .Where(v => v.VaultId == vaultId && v.IsCurrent).ToList(); 
    } 

    [Invoke] 
    public void UpdateVaultRemainders(List<VaultAmountQuantity> updatedQuantities, string comment, Guid userId, 
     string friendlyName, 
     Guid vaultAmountId, int currencyId) 
    { 
     VaultAmount vaultAmount = 
      this.DbContext.VaultAmounts 
       .Include("Vault") 
       .SingleOrDefault(va => va.VaultAmountId == vaultAmountId); 

     if (vaultAmount == null && vaultAmount.Vault == null) return; 

     //Get FromVault and ToVault with amounts and updatedQuantities 
     List<VaultAmount> currentAmounts = GetCurrentVaultAmounts(vaultAmount.Vault.VaultId); 
     //Vault vault = GetVaultWithCurrentAmountsAndQuantitiesById(vaultAmount.Vault.VaultId); 

     var helper = new RemainderVAHelper(currentAmounts, userId, friendlyName, currencyId, updatedQuantities, 
      comment, 
      BS2VaultEventTypes.Correction); 

     //................................ 

     foreach (var amount in currentAmounts) 
     { 
      if (amount.IsCurrent == false) 
      { 
       DbEntityEntry<VaultAmount> entityEntry = this.DbContext.Entry(amount); 
       entityEntry.State = EntityState.Modified; 
      } 
     } 
     this.DbContext.SaveChanges(); 
    } 

В RemainderVAHelper класса я меняюсь currentAmounts объектов, установите IsCurrent недвижимость ложный. Но currentAmounts объектов entityEntry.State все еще Без изменений. Зачем? Да, я могу установить их состояния как Изменен (как я делаю в методе), но я думаю, что это не очень хорошо. Можете ли вы сказать мне, почему состояние моих объектов не изменяется до Изменено?

+0

Ваши объекты в «присоединенном состоянии» в контексте? – Whoami

ответ

0

Если вы не используете отслеживание изменений прокси-серверов EF не имеет возможности узнать, вы изменили свойства, пока вы не вызовете DetectChanges или позвоните SaveChanges (который вызывает DetectChanges)

+0

Собственно, да. Я добавил строку: var detect = DbContext.Configuration.AutoDetectChangesEnabled; и обнаружение было ложным. Большое спасибо. Как установить этот параметр в true, ко всем моим услугам домена? – Oblomingo

+0

Это интересно, потому что значение по умолчанию - 'true' и из того, что я просматривал в EF-коде EF, не устанавливает его в' false' – Pawel

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