2011-03-05 25 views
10

Nunca antes he usado el framework de entidad y me gustaría probar algunos proyectos personales para implementarlo y mojarme los pies.Entity Framework And Business Objects

Veo que las entidades se pueden exponer a la capa de presentación. Pero no quiero que se expongan ciertos campos, campos como fechas modificadas y fechas creadas y varios otros campos de base de datos.

¿cómo podría implementar Business Objects y solo exponer las propiedades que necesito pero aún así mantener los objetos serializables?

¿Qué ventajas tiene esto sobre LinqToSql?

Respuesta

22

Cuando define una entidad en el modelo EDMX, puede especificar la visibilidad del setter y getter de cada propiedad, por lo que si no desea que el ModifiedDate sea visible en otras capas, simplemente puede especificarlo como interno.

enter image description here

Si sus necesidades son más complicadas como el ModifiedDate debe ser accesible en las entidades de montaje y el conjunto de la lógica de negocio, pero no en el conjunto de la interfaz de usuario, a continuación, es necesario crear otro objeto que se intercambia entre el lógica empresarial y las capas lógicas UI.

+0

¿Qué tal una pequeña muestra de código? –

+0

@Robert: ¿Qué tipo de muestra esperas? –

+0

¿Cómo se especifica la visibilidad del captador y colocador de cada propiedad? –

1

Sólo enlazar las propiedades que desee a la capa de presentación, esto puede hacerse a través de la declaración, una capa de lógica de negocios (con su propio nivel de abstracción de objetos) o su ViewModel.

+0

¿Qué tal una pequeña muestra de código? –

+0

sí. Me gustaría parecer un pequeño ejemplo de esto. – BastanteCaro

3

Personalmente uso una clase de contenedor sobre la entidad y expongo o sombreo lo que necesito.

// instead of below property in your BLL: 

private int m_someVariable; 

public int SomeVariable 
{ 
    get { return m_someVariable; } 
    set { m_someVariable = value; } 
} 

// You can use the entity object: 

private readonly EntityClass _entityObject = new EntityClass(); 

public int SomeVariable 
{ 
    get { return _entityObject.SomeVariable; } 
    set { _entityObject.SomeVariable = value; } 
} 

// or make it read-only at your BLL 

public int SomeVariable 
{ 
    get { return entityObject.SomeVariable; } 
    // set { entityObject.SomeVariable = value; } 
} 
+1

esto suena como lo que estaba buscando. esto se puede serializar con facilidad? – BastanteCaro

+0

Sí, simplemente marque su clase 'BLL' como' serializable' y siga las reglas. Estaba pensando en esta solución por un tiempo y esto estaba funcionando para mí. Prefiero esto porque puedes declararlo en un proyecto independiente y no agregar ninguna 'clase parcial' al proyecto de la entidad (en mi caso, dos equipos diferentes estaban trabajando en cada proyecto). Hay algunos trucos acerca de esta solución, como la creación de dos constructores, uno sin parámetros y otro que acepta un objeto de entidad ... – Xaqron

1
 // this is your edmx 
     Asset5Entities conx = new Asset5Entities(); 

// consideran que esta es una nueva lista de objetos de contacto que es una tabla en la base de datos utilizando // marco de la entidad esta tabla de base de datos se asigna a un objeto para u para manejar

  List$gt;Contact$lt; s = new List$gt;Contact$lt;(); 

// usando una gran de LINQ u ahora puede seleccionar o consulta sobre cualquier tabla de base de datos y ur u tiene // acceso a las columnas en ese ejemplo de mesa (Email) aquí

 var result = from q in conx.Contacts select q.Email; 

// en lugar de

 string sqlcommand = "select email from Contacts"; 
     Contact con = new Contact(); 
     con.Email= "[email protected]"; 
     con.FirstName="nader"; 

     //etc etc... 



     conx.Contacts.AddObject(con); 

     //rather than " insert into Contact values ......................" 

     //having your queries within ur c# code rather than strings that are not parsed //for errors but on runtime was alot helpful for me 
Cuestiones relacionadas