Wpf Entity.EntityState.Modified

Messages postés
165
Date d'inscription
mardi 7 mars 2006
Dernière intervention
24 avril 2018
-
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 !!!
Afficher la suite 

Votre réponse

1 réponse

Messages postés
12388
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
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.
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.