erefdatacomputing
Messages postés165Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention24 avril 2018
-
Modifié le 12 juin 2017 à 21:53
Whismeril
Messages postés19025Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention19 avril 2024
-
13 juin 2017 à 12:12
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 !!!
Whismeril
Messages postés19025Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention19 avril 2024656 13 juin 2017 à 12:12
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.