2013-08-14 11 views
11

Jestem początkującym w WPF. Chcę wiedzieć, jaka jest różnica między dbcontext.Add i dbcontext.AddObject.Czym różni się dbcontext.Add i dbcontext.AddObject

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

Chcę to osiągnąć dbcontext.AddObject(). Ale pojawia się błąd:

'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`

Również sugeruję, który z nich jest lepszy. Dziękuję Ci.

+1

To nie ma nic wspólnego z WPF.Jest powiązany z Entity Framework. – shahkalpesh

Odpowiedz

14

Właściwie mówimy o metodzie AddObject klasy , która była używana przez stare ObjectContext. Ale od Entity Framework 4 mamy klasę DbContext (która jest opakowaniem po starym ObjectContext). Ta nowa klasa używa DbSet<TEntity> zamiast starego ObjectSet<TEntity>. Nowa klasa zestawu ma metodę Add.

Powrót do różnic. Stary realizacja wywoływana AddObject metodę ObjectContext:

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

Nowa realizacja ma to samo działanie (patrz parametr):

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

Jak można zobaczyć sama metoda ObjectContext.AddObject nazywa się wewnętrznie. Co zostało zmienione - wcześniej po prostu dodaje podmiot kontekstu, ale teraz, jeśli istnieje wpis państwo istnieje w ObjectStateManager, to tylko zmiana stanu wejścia do Added:

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

Głównym celem nowego API czyni DbContext łatwiej posługiwać się.

+0

Należy pamiętać, że problemy z OP są wynikiem wywołania AddObject na DbSet , a nie w kontekście. Może możesz rozwinąć swoją odpowiedź pokazując, jak używać obu, przez wywołanie ObjectContext.AddObject ("Nazwy", nameEntityToAdd) i DbContext.Names.Add (nameEntityToAdd) – zeebonk

1

Wywołanie AddObject w ObjectContext w celu dodania obiektu do kontekstu obiektu.

Należy to zrobić, gdy obiekt jest nowym obiektem, który jeszcze nie istnieje w źródle danych.

Podczas tworzenia nowego obiektu, który jest powiązany z innym obiektem w kontekście obiektu, dodaj obiekt za pomocą jednej z następujących metod: Wywołaj metodę Add w EntityCollection i określ powiązany obiekt.

0

W skrócie wydaje się, że są mniej więcej takie same. Znalazłem ten blogu trochę krótki i na temat:

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

Można też rzucić okiem na MSDN, ale w tym przypadku uważam, że jest trochę tajemniczy.

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

Twój błąd wskazuje, że metoda nie jest dostępna. Uważam, że dzieje się tak po przejściu na nową wersję Entity Framework. Będziesz musiał przejść i zmienić wszystkie wywołania metod do nas Add

Jeśli istnieje jakiś podstawowy powód, dla którego chcesz użyć AddObject, następnie wyjaśnij bardziej szczegółowo, jakie są Twoje potrzeby, aby ktoś mógł lepiej Ci pomóc .

Powiązane problemy