Beantwortet ObservableCollection(Of T) zurück in DB schreiben mit LINQ

  • Freitag, 4. Januar 2013 12:37
     
      Enthält Code

    Hallo zusammen,

    ich hätte da eine Frage und zwar geht es darum das ich ein Programm mit der WPF schreibe. Dort erstelle ich mir ObservableCollection(Of ) an die ich die Elemente binde. Das klappt auch alles, ganz gut, doch was mir noch nicht klar ist, wie ich die Collection mit den Änderungen wieder zurück in die DB schreiben kann.

    Als Beispiel:

    Ich erstelle eine neue Collection und fülle sie mit einer LINQ-Abfrage

    Public Material As ObservableCollection(Of MaterialBedarf)
    
     Private Sub Window_Loaded_1(sender As Object, e As RoutedEventArgs)
            Dim Abfrage = From m In db.MaterialBedarf
                          Where m.MB_ID = _id
                          Select m
    
        Material = New ObservableCollection(Of MaterialBedarf)(Abfrage)
        'Abfrage der ListBox übergeben
        lbMaterial.DataContext = Material
    
        End Sub

    Ich binde dann die TextBoxen alle an die ListBox

    <ListBox Grid.Column="1" Grid.Row="8" Grid.ColumnSpan="4"
    Name="lbMaterial" ItemsSource="{Binding}" DisplayMemberPath="MB_Name"
    IsSynchronizedWithCurrentItem="True" MinWidth="20" />
    <TextBox Grid.Column="7" Grid.Row="2" Text="{Binding SelectedItem.MB_Menge,
    ElementName=lbMaterial, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <TextBox Grid.Column="7" Grid.Row="4" Text="{Binding SelectedItem.MB_Info,
    ElementName=lbMaterial, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> <Image Grid.Column="6" Grid.Row="8" Grid.ColumnSpan="2" Name="IMG"
    Source="{Binding }" />

    Beim einfügen oder entfernen eines Eintrages erstelle ich Objekt

    Material.Add(Objekt)
    oder
    Material.Remove(Objekt)

    Und jetzt kommt mein Problem, denn ich weiß nicht wie ich jetzt per LINQ die Collection der DB übergeben kann

    Wenn mir jemand eine Idee hätte wäre ich echt froh

    Vielen Dank schonmal vorweg

    Grüßle

    Jo 


Alle Antworten

  • Sonntag, 6. Januar 2013 16:37
     
     Beantwortet
    Hi Joachim,
    in der ObservableCollection werden die Verweise die Datenobjekte gehalten. Die Datenobjekte werden vom Context (bei Dir “db”) bereitgestellt, der auch Zugriff aus die Zustände der Datenobjekte hat. Der Context hat auch eine Methode zum Speichern (z.B. SaveChanged). Diese Methode erkennt an Hand der Zustande, was mit der externen Datenbank zu machen ist (DELETE, INSERT, UPDATE).
     
    Zu beachten ist aber, dass ein Remove das Dateobjekt lediglich aus der Liste in der Anwendung entfernt und auf die externe Datenbank keine Auswirkung hat. Wenn in der externen Datenbank ein Datensatz zu löschen ist, dann muss das entsprechende Datenobjekt in der Anwendung mit der Delete-Methode für das spätere Löschen gekennzeichnet werden.
     
    --
    Peter Fleischer
  • Montag, 7. Januar 2013 09:56
     
     Beantwortet

    Hallo Peter,

    ich Danke dir für deine Hilfe,  ich habe es jetzt so gemacht dass ich beim löschen eines Datensatzes
    ich den über

    db.MaterialBedarf.Remove(Objekt)
    db.SubmitChanges

    entfernt habe.

    Grüßle Jo