Pregunta

he hecho alusión a esta cuestión en mi otra pregunta, pero creo que vale la pena romper hacia fuera en su propia pregunta, ya que no es realmente depende de los otros escenarios que he mencionado.

De todas formas - a la Q, no sé si esto es posible. Buscando una solución / solución.

Tengo una biblioteca de clases, con nada más que de POCO:

MyCompany.MyProject.Domain.POCO

Este conjunto tiene un POCO así:

public class Post
{
   public int PostId { get; set; }
   public int Name { get; set; }
      ...
}

Ahora, tengo otra biblioteca de clases, que es mi DAL / repositorio, y utiliza Entity Framework 4.0 para la persistencia:

MyCompany.MyProject.Repositories

Esto tiene un ensamblaje referencia al proyecto POCO, ya que tiene que ser realizar operaciones CRUD sobre de la POCO (agarrar objetos DB, proyecto en POCO de, a cambio, así como modificar POCO 's).

Ahora, también tiene un aplicación Web , que tiene una referencia tanto a la POCO y Repositorio de montaje.

Si hago esto:

somePOCO.PostId = 10;

recibo una excepción de SQL, como postID es un campo de identidad en la base de datos, y por lo tanto no se debe establecer explícitamente.

¿Hay alguna manera de Ocultar la incubadora para estas propiedades especiales, por lo que sólo el repositorio tiene acceso a la incubadora?

No se puede pensar en una manera de hacerlo con modificadores de accesibilidad regulares (ya que ninguno de ellos se adapte a la situación), pueden ustedes pensar en una solución?

¿Fue útil?

Solución

que podría hacer que el colocador interna, y hacer visibles las partes internas de la asamblea repositorio

[assembly: InternalsVisibleTo("MyLibrary.Repositories")]
public class Post
{
   public int PostId { get; internal set; }
   public int Name { get; internal set; }
      ...
}

Esto significa que todo lo puede 'conseguir' esas propiedades, pero sólo esta asamblea, y el ensamblaje que contienen el repositorio, puede 'conjunto'

Otros consejos

Marcar todos los emisores como internos, a continuación, agregar el atributo InternalsVisibleTo a sus POCOs montaje:

 [assembly: InternalsVisibleTo( "MyCompany.MyProject.Repositories" )]  

Lucas Schafer es una buena respuesta. Satisface el requisito técnico de la cuestión. Pero te aconsejo precaución simplemente porque esto no puede resolver el problema en el futuro.

No es para sugerir más de ingeniería, pero tal vez es posible que desee pensar en abstrayendo aún más lo que está haciendo con estos objetos que tienen la propiedad ID ajustable. Puede ser suficiente para crear esta 'visibilidad' con esta decoración atributo, pero creo que es una especie de un corte para el problema. Podría ser más limpio para encapsular la interacción entre estos objetos con algo más, eliminando así el acceso colocador de consumir código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top