2012-03-01 26 views
9

Me gustaría que mi modelo de Entity Framework para generar entidades con internal modificador de acceso, en lugar de public. Uso el modelo EF en una biblioteca y solo quiero acceder a una sola clase (algunos controladores) desde el exterior.Cómo hacer que todas las entidades tengan acceso: interno en lugar de público en EDMX?

¿Hay alguna manera simple de hacer que la generación del modelo EF use el modificador internal en lugar de public, incluida la regeneración del modelo en la actualización?

Respuesta

1

Es muy parecido al que obtuve en un similar question. Pero en su caso, desea personalizar el modificador de acceso de las clases, en lugar de ObjectContext.

Adaptado después de la respuesta de HVD:

El diseñador tiene una opción "Añadir generación de código de artículo". Si usa esto, obtendrá varias opciones. Estoy usando "ADO.NET Self-Tracking Entity Generator", pero de la misma manera funciona para todos. Elegir esto agrega dos archivos de plantilla (Model.tt y Model.Context.tt) a su proyecto, que puede modificar como lo considere oportuno. Para la modificación que está pidiendo alrededor, encontrará una generación de código para sus clases de entidad en o cerca de la línea 37. Cambio

< # = Accessibility.ForType (entidad) #> # = < code.SpaceAfter (code.AbstractOption (entidad)) #> clase parcial ...

a

clase parcial ...

Para el tipo complejo hay una línea similar más abajo, también: borre la parte antes de "parcial".

Esto configurará los modificadores de acceso para todos los tipos a la vez, los futuros tipos incluidos. Para personalizar tipos individuales, es mejor utilizar el navegador modelo.

También tendrá que establecer la propiedad "Entity Container Access" del modelo en el interno, de lo contrario se generarán miembros con modificadores de acceso incompatibles.

3

, en la ventana del explorador de modelo Seleccione> EntityTypes Sure

Model Browser

y de su tipo establecido en las propiedades de modificador de acceso ventana. También debe modificar en EntityContainer> EntitySets el modificador para el conjunto, como si el tipo fuera interno, el conjunto también debería ser al menos interno (público predeterminado).

Opcionalmente puede utilizar la plantilla T4, donde puede modificar directamente el acceso modificado que se está generando.

+0

Conozco la ventana Propiedades, pero no me permite seleccionar varias entidades y configurar su modificador de acceso al mismo tiempo. Tengo que hacerlo uno por uno. Creo que necesito ver las plantillas T4. –

+2

Abra el archivo EDMX con el editor XML (es un archivo XML sin formato) y reemplace el lote por allí. Hecho en 20 segundos. –

+0

Sí, estaba buscando una solución más permanente (donde los modificadores no serían reemplazados por la regeneración de código), pero eso está bien también. –

0

Quería que el contenedor de mi entidad así como las clases complejas generadas fueran internas. Primero configuro el "Acceso al contenedor de la entidad" a interno. Luego agregué una variable de contenedor a la parte superior del archivo "Model.tt" después de la inicialización de la variable itemCollection. Encontré el código variable del contenedor en el archivo "Model.Context.tt".

var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile); 
    var container = itemCollection.OfType<EntityContainer>().FirstOrDefault(); 

siguiente que cambió

<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#> 

a

<#=Accessibility.ForType(container)#> partial class <#=code.Escape(complex)#> 

he elegido para modificar el código de esta manera para que yo podía mantener los modificadores de acceso de contenedores de clase complejas en sincronía con el contenedor modificador de acceso.

Gracias Gert Arnold por guiarme en la dirección correcta.

Cuestiones relacionadas