2013-08-14 12 views
11

Sono principiante presso WPF. Voglio sapere che cos'è la differenza tra dbcontext.Add e dbcontext.AddObject.Qual è la differenza tra dbcontext.Add e dbcontext.AddObject

private void AddButton_Click(object sender, RoutedEventArgs e) 
{ 
     Name employee = new Name(); 
     employee.Name1 = "Test"; 
     dataContext.Names.AddObject(employee); 
} 

Voglio raggiungere questo dbcontext.AddObject(). Ma ottengo un errore:

'System.Data.Entity.DbSet' does not contain a definition for 'AddObject' and no extension method 'AddObject' accepting a first argument of type 'System.Data.Entity.DbSet' could be found (are you missing a using directive or an assembly reference?) C:\Documents\Visual Studio 2012\Projects\WpfApplication9\WpfApplication9\MainWindow.xaml.cs 49 31 WpfApplication9`

Anche suggerire quale è meglio. Grazie.

+1

Questo non ha nulla a che fare con WPF.È correlato a Entity Framework. – shahkalpesh

risposta

14

In realtà si tratta del metodo AddObject della classe ObjectSet<TEntity> utilizzato dal vecchio ObjectContext. Ma poiché Entity Framework 4 abbiamo la classe DbContext (che è un wrapper sul vecchio ObjectContext). Questa nuova classe utilizza DbSet<TEntity> anziché il vecchio ObjectSet<TEntity>. La nuova classe impostata ha il metodo Add.

Quindi, torna alle differenze. Vecchio implementazione invocato AddObject metodo ObjectContext:

public void AddObject(TEntity entity) 
{ 
    Context.AddObject(FullyQualifiedEntitySetName, entity); 
} 

Nuova implementazione non stessa cosa (vedi parametro action):

public virtual void Add(object entity) 
{ 
    ActOnSet(() => ((InternalSet<TEntity>) this).InternalContext.ObjectContext.AddObject(((InternalSet<TEntity>) this).EntitySetName, entity), 
       EntityState.Added, entity, "Add"); 
} 

Come si può vedere lo stesso metodo ObjectContext.AddObject viene chiamato internamente. Ciò che è stato cambiato - entità in precedenza abbiamo appena aggiunto al contesto, ma ora se non v'è l'ingresso dello Stato esiste in ObjectStateManager, poi abbiamo appena cambiare lo stato d'ingresso al Added:

if (InternalContext.ObjectContext.ObjectStateManager.TryGetObjectStateEntry(entity, out entry)) 
{ 
    entry.ChangeState(newState); // just change state 
} 
else 
{ 
    action(); // invoke ObjectContext.AddObject 
} 

obiettivo principale della nuova API sta facendo DbContext più facile uso.

+0

Si noti che i problemi che l'OP ha sono il risultato della chiamata AddObject sul DbSet e non sul contesto. Forse puoi elaborare la tua risposta mostrando come usare entrambi, chiamando ObjectContext.AddObject ("Names", nameEntityToAdd) e DbContext.Names.Add (nameEntityToAdd) – zeebonk

1

Chiamare AddObject su ObjectContext per aggiungere l'oggetto al contesto dell'oggetto.

Da eseguire quando l'oggetto è un nuovo oggetto che non esiste ancora nell'origine dati.

Quando si crea un nuovo oggetto correlato a un altro oggetto nel contesto dell'oggetto, aggiungere l'oggetto utilizzando uno dei seguenti metodi: Chiamare il metodo Aggiungi su EntityCollection e specificare l'oggetto correlato.

0

In breve, sembra che siano più o meno gli stessi. Ho trovato questo post del blog un pò breve e al punto:

http://blog.cincura.net/232485-someentityset-addobject-vs-addtosomeentityset-methods/

Si può anche avere uno sguardo alla MSDN, ma in questo caso particolare, ho trovato ad essere un po 'criptico.

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.addobject.aspx

Il tuo errore è che indica che il metodo non è disponibile. Trovo che ciò accada quando passi a una nuova versione di Entity Framework. Devi passare e modificare tutte le tue chiamate di metodo a noi Add

Se c'è qualche motivo principale per cui vuoi utilizzare AddObject, quindi spiega più in dettaglio quali sono le tue esigenze qui così qualcuno può aiutarti meglio .

Problemi correlati