Domanda

Di 'ha il seguente codice:

public void SaveOrUpdate(OrderContract orderContract)
{
   foreach (var orderContract in orderContract.Tests)
   {

      Order order=dataAccess.FindOne<Order>(x=>x.OrderId==orderContract.OrderId) 
                  ?? new Order();

      // Where there are updates, put the stuff in the 
      // contract over what we already had.
      Mapper.Map(orderContract, order);

       // if it is new then add it in so it is inserted by EF.
      if (orderedTest.OrderedTestId <= 0)
          dataAccess.Add(orderedTest);

   }
   dataAccess.SaveChanges();
}

non EF ha tutto ciò che si cura se qualcuno aggiorna un ordine dopo a recuperare esso (nella chiamata FindOne?

O sarà solo felicemente sovrascrivere tutte le modifiche che sono state fatte tra il recupero dei dati e la mia chiamata a SaveChanges?

Se non lo fa, allora sarebbe un ObjectContext.Connection.BeginTransaction chiamata essere migliore per proteggere me? O devo usare new TransactionScope()?

E come può uno di quelli sapere che cosa le righe ho bisogno di avere in una transazione. (Solo perché ho letto una riga non vuol dire che lo voglio bloccato. O lo fa bloccare tutte le tabelle nel modello (bleah)).

Nota: Sono in esecuzione con SQL Server 2008 R2 e EF 4.1

È stato utile?

Soluzione

Per impostazione predefinita, sì, sovrascrive record modificati. Se siete preoccupati per la vostra applicazione, leggere questo:

http://msdn.microsoft.com/en-us/library/ bb738618.aspx

Per impostazione predefinita, Entity Framework implementa un modello di concorrenza ottimistica. Ciò significa che le serrature non sono detenuti su dati nell'origine dati tra quando i dati viene interrogato ed i dati vengono aggiornati. Entity Framework salva le modifiche oggetto nel database senza controllare per la concorrenza. Per le entità che potrebbe avere un alto grado di concorrenza, si raccomanda che l'entità definire una proprietà nel livello concettuale con un attributo di ConcurrencyMode = "fisso" ..... (link sottostante per leggere di più)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top