¿Cómo pasar entidades variables a una función genérica?

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

Pregunta

Si genero mis entidades a través de Entity Framework Database First , y quiero usar una función como esa:

AuditManager.DefaultConfiguration.Exclude<T>();

Teniendo en cuenta que el número de veces que quiero llamar debería ser igual al número de entidades

ex:

AuditManager.DefaultConfiguration.Exclude<T>();

Ahora, ¿cómo pasar por el número seleccionado de entidades y pasar cada una a la función Exclude ?

Respuesta aceptada

La solución obvia sería llamar al método para cada tipo de entidad que desee ocultar. Me gusta esto:

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

Puede agregar sentencias condicionales ( if las hay) alrededor de ellas para hacerlo dinámicamente.

Sin embargo, si desea una solución completamente flexible, donde llama al método Exclude basado en metadatos, necesita algo más. Algo como esto:

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

Esto supone que el método Exclude<T> es un método de instancia en cualquier instancia que DefaultConfiguration apunte.


Respuesta popular

Una alternativa al bucle a través de sus tipos de entidad es hacer que las entidades que no desea auditar implementen la misma interfaz y excluirla. Por ejemplo:

public interface IExcludeFromAudit
{ }

Y tus entidades:

public interface IExcludeFromAudit
{ }

Y ahora solo excluye la interfaz:

public interface IExcludeFromAudit
{ }

El beneficio de esto es que ahora es fácil controlar cuáles están excluidos.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué