Come passare entità variabili ad una funzione generica?

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

Domanda

Se genero le mie entità tramite Entity Framework Database First , e voglio usare una funzione del genere:

AuditManager.DefaultConfiguration.Exclude<T>();

considerando che il numero di volte che voglio chiamarlo dovrebbe essere uguale al numero di entità

ex:

AuditManager.DefaultConfiguration.Exclude<T>();

Ora come passare in rassegna il numero selezionato di entità e passare tutti alla funzione Exclude ?

Risposta accettata

La soluzione ovvia sarebbe chiamare il metodo per ogni tipo di entità che si desidera nascondere. Come questo:

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

È possibile aggiungere dichiarazioni condizionali ( if s) intorno a loro per farlo dinamicamente.

Tuttavia, se si desidera una soluzione completamente flessibile, in cui si chiami il metodo Exclude basato sui metadati, è necessario qualcos'altro. Qualcosa come questo:

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

Ciò presuppone che il metodo Exclude<T> sia un metodo di istanza su qualsiasi istanza a cui DefaultConfiguration punta.


Risposta popolare

Un'alternativa al ciclo dei tipi di entità consiste nel rendere le entità che non si desidera controllare implementare la stessa interfaccia ed escluderla. Per esempio:

public interface IExcludeFromAudit
{ }

E le tue entità:

public interface IExcludeFromAudit
{ }

E ora basta escludere l'interfaccia:

public interface IExcludeFromAudit
{ }

Il vantaggio di questo è che ora è facile controllare quali sono esclusi.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché