Wpf Entity.EntityState.Modified

Signaler
Messages postés
165
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
24 avril 2018
-
Messages postés
15412
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 2021
-
Bonjour
je développe actuellement une appli en Wpf.
J'ai 2 classes objets "Articles" et "Taxes" qui sont codées comme ceci:

Imports System.ComponentModel.DataAnnotations
Public Class Articles
    <Key>
    Public Property Id As Integer
    <StringLength(255)>
    Public Property Nom As String
    Public Property LaTaxe As Taxes
    Public Property VenteTtc As Double 
End Class 


Imports System.ComponentModel.DataAnnotations
Public Class Taxes
    <Key>
    Public Property Id As Integer
    Public Property Nom As Double
End Class


j'ai une 3eme classe qui me sert de "viewmodel", dont voilà le code:

Imports System
Imports System.Data.Entity
Imports System.Data.Entity.Core.Metadata.Edm
Imports System.Data.Entity.Infrastructure
Imports System.Linq


Public Class Model1
    Inherits DbContext

    Public Sub New()
        MyBase.New("name=Model1")
    End Sub

    Public Overridable Property Articles() As DbSet(Of Articles)
    Public Overridable Property Taxes() As DbSet(Of Taxes)
End Class



Et enfin, j'ai une fonction qui me permets de faire un update sur un "Article" que je lui passe en argument, et qui est comme ceci:

Public Shared Function Edit(Item As Articles) As Boolean
        If IsNothing(Item) = False Then
            Using ctx As New Model1
                ctx.Entry(Item).State = Entity.EntityState.Modified
                ctx.SaveChanges()
                Return True
            End Using
        Else
            Return False
        End If
    End Function


Le problème est que quand je modifie les propriétés de l'article et que je l'envoie comme argument ("Item") à la fonction Edit, celle ci met bien à jour toutes les propriétés ... SAUF "LaTaxe" !!! ...

Pour que ça fonctionne comme je le veux, je dois faire cette modif à ma fonction:

    Public Shared Function Edit(Item As Articles) As Boolean
        If IsNothing(Item) = False Then
            Using ctx As New Model1
                ctx.Entry(Item).State = Entity.EntityState.Modified
                ctx.SaveChanges()

                Dim tx = (From x In ctx.Taxes Where x.Id = Item.Taxes.Id Select x).Single
                Item.Taxes = tx
                ctx.SaveChanges()
                Return True
            End Using
        Else
            Return False
        End If
    End Function



Mais je veux me passer de cette modif pour 2 raisons:
1°) Je trouve étonnant que les cerveaux de Microsoft n'aient pas pensé à faire un "Entity.EntityState.Modified" comprenant les "sous-objets" !

2°) J'aimerai la rendre plus générique (tout en restant typé) afin de me permettre de faire les "Update" de mes différents objets.

Est ce que quelqu'un à une solution SVP ?
Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!

1 réponse

Messages postés
15412
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 2021
503
Bonjour
Je n'ai pas encore utilisé entity donc je fais une supposition, pour le binding il faut implémenter INotifyPropertyChanged dans les classes, peut être que là aussi.