J'ai ajouté une colonne 'IsDeleted' à chaque entité dans mon modèle Entity Framework 4.0 et j'ai implémenté une interface pour cela. Comment puis-je accomplir que les entités avec 'IsDeleted' à 'true' sont ignorées par tous les objets Objectsets et Navigationproperties dans mon modèle? Filtrer le résultat en utilisant LinQ ne fonctionne pas je pense, parce que le résultat ne peut pas être transformé en un ObjectSet.Ignorer les enregistrements marqués comme supprimés dans les propriétés de navigation dans EF 4.0
Quelqu'un peut-il m'aider s'il vous plaît?
BTW: Mon modèle génère ObjectSets dans la classe de contexte comme celui-ci:
Private _Persons As ObjectSet(Of Person)
Public ReadOnly Property Persons() As ObjectSet(Of Person)
Get
If (_Persons Is Nothing) Then
_Persons = MyBase.CreateObjectSet(Of Person)("Persons")
End If
Return _Persons
End Get
End Property
et les propriétés de navigation pour les entités comme celui-ci:
<XmlIgnoreAttribute()>
<SoapIgnoreAttribute()>
<DataMemberAttribute()>
<EdmRelationshipNavigationPropertyAttribute("Model", "Map_Persons_Organisations", "Persons")>
Public Property Persons() As EntityCollection(Of Person)
Get
Return CType(Me,IEntityWithRelationships).RelationshipManager.GetRelatedCollection(Of Person)("Model.Map_Persons_Organisations", "Persons")
End Get
Set
If (Not value Is Nothing)
CType(Me, IEntityWithRelationships).RelationshipManager.InitializeRelatedCollection(Of Person)("Model.Map_Persons_Organisations", "Persons", value)
End If
End Set
End Property
Le but est que je ne veuille pas perdre les données supprimées. Il ne devrait pas (JAMAIS) être visible sur l'interface graphique. Je ne pense pas que je peux le faire avec AcceptChanges(). Ajouter 'WHERE IsDeleted = false' ou quelque chose à chaque requête n'est pas non plus une option, car elle serait oubliée de temps en temps. – FabianAlbrecht
Il semble que vous essayez d'implémenter un drapeau "Archivé" qui indique qu'une Entité a été "désactivée" et ne devrait pas être accessible. C'est une exigence spécifique à l'application en dehors de la portée d'EF. Si vous ne voulez pas avoir à filtrer toutes vos requêtes sur un drapeau comme celui-là, vous devriez considérer une méthode Archive qui * copie * les entités "désactivées" dans une table d'archivage. –
C'est une mauvaise réponse au problème. Je sais que c'est une vieille question, mais c'est toujours une question commune et votre réponse dit essentiellement: «Je me fiche de ce que vous faites - vous le faites mal» et vous êtes trop ignorant de la situation pour faire une telle une réclamation. Que se passe-t-il si la conception du système est que l'application ne doit pas prendre en compte les enregistrements supprimés de manière logicielle et que ce processus d'archivage est effectué par l'équipe de base de données/de données? Ensuite, cela nous amène à penser qu'il s'agit en fait d'une préoccupation propre à la base de données et qu'ils essaient de rendre leur DAL conforme. – Jaxidian