Comment passer des entités variables à une fonction générique?

.net c# entity-framework entity-framework-plus generics

Question

Si je génère mes entités via Entity Framework Database First , et que je souhaite utiliser une fonction comme celle-ci:

AuditManager.DefaultConfiguration.Exclude<T>();

considérant que le nombre de fois que je veux l'appeler devrait être égal au nombre d'entités

ex:

AuditManager.DefaultConfiguration.Exclude<T>();

Maintenant, comment parcourir le nombre d’entités sélectionnées et les transmettre à la fonction Exclude ?

Réponse acceptée

La solution évidente serait d'appeler la méthode pour chaque type d'entité que vous souhaitez masquer. Comme ça:

AuditManager.DefaultConfiguration.Exclude<Employee>();
AuditManager.DefaultConfiguration.Exclude<Department>();
AuditManager.DefaultConfiguration.Exclude<Room>();

Vous pouvez ajouter des instructions conditionnelles ( if s) autour d'eux pour le faire de manière dynamique.

Cependant, si vous souhaitez une solution totalement flexible, dans laquelle vous appelez la méthode Exclude basée sur des métadonnées, vous avez besoin de quelque chose d'autre. Quelque chose comme ça:

AuditManager.DefaultConfiguration.Exclude<Employee>();
AuditManager.DefaultConfiguration.Exclude<Department>();
AuditManager.DefaultConfiguration.Exclude<Room>();

Cela suppose que la méthode Exclude<T> est une méthode d'instance, quelle que soit l'instance sur laquelle pointe DefaultConfiguration .


Réponse populaire

Une alternative à la boucle dans vos types d'entité est de faire en sorte que les entités que vous ne voulez pas auditer implémentent la même interface et l'excluent. Par exemple:

public interface IExcludeFromAudit
{ }

Et vos entités:

public interface IExcludeFromAudit
{ }

Et maintenant, excluez simplement l'interface:

public interface IExcludeFromAudit
{ }

L'avantage de ceci est qu'il est maintenant facile de contrôler ceux qui sont exclus.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi