N-capas con Entity Framework

12/08/2009 - 20:06 por José Huamán La Rosa | Informe spam
Hola

Tengo un problema con Entity Framework:

Proyecto CapaDeDatosEF : acá tengo el modelo (edmx)
Proyecto CapaLógica: Acá tengo la logica del negocio p.e.

public class BLSisAccesos
{
ComerciaEntities ModeloEntidades { get; set; }

public BLSisAccesos()
{
ModeloEntidades = new ComerciaEntities();
}
public List<SisAccesos> Accesos(string CodigoUsuario)
{
var SisAccesos =
ModeloEntidades.SisAccesos.Include("SisMenu").Include("Usuario").Where(sam
=> sam.Usuario.codigo == CodigoUsuario).OrderBy(sam=> sam.SisMenu.codigo);
return SisAccesos.ToList();
}
public SisAccesos AccesosXUsuario(string CodigoUsuario)
{
var sisaccesos =
ModeloEntidades.SisAccesos.Include("SisMenu").Include("Usuario").Where(sam
=> sam.Usuario.codigo == CodigoUsuario).OrderBy(sam =>
sam.SisMenu.codigo).First();
return sisaccesos;
}
public List<SisAccesos> ListaAccesosXUsuario(string CodigoUsuario)
{
var SisAccesos =
ModeloEntidades.SisAccesos.Include("SisMenu").Include("Usuario").Where(sam
=> sam.Usuario.codigo == CodigoUsuario).OrderBy(sam => sam.SisMenu.codigo);
return SisAccesos.ToList();
}


Proyecto CapaEntidadesdeNegocio: acá deben ir todas las bussines entities,
p.e., hereda del modelo edmx

public partial class BESisAccesos : SisAccesos
{
ComerciaEntities ModeloEntidades { get; set; }
public BESisAccesos()
{
ModeloEntidades = new ComerciaEntities();
}
}

y por último la capa de presentación, en esta capa utilizo las capa logica y
de entidades, pero no acepta crear me da error al hacer:
using CapaLogicaNegocio;
using CapaEntidadesNegocio;

public List<BESisAccesos> vOpciones = new List<BESisAccesos>();
public BLSisAccesos oBLSisAccesos = new BLSisAccesos();


protected void Page_Load(object sender, EventArgs e)
{
vOpciones =
oBLSisAccesos.ListaAccesosXUsuario(Session["UsuarioCodigo"].ToString());
*** Acá da error *** Error 1 No se puede convertir implícitamente el tipo
System.Collections.Generic.List<CapaDeDatosEF.SisAccesos>' en
'System.Collections.Generic.List<CapaEntidadesNegocio.BESisAccesos>
}

alguíen que me ayude por favor...

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
12/08/2009 - 21:36 | Informe spam
"José Huamán La Rosa" wrote in message
news:
[...]
public List<BESisAccesos> vOpciones = new List<BESisAccesos>();
public BLSisAccesos oBLSisAccesos = new BLSisAccesos();
[...]
*** Acá da error *** Error 1 No se puede convertir implícitamente el tipo
System.Collections.Generic.List<CapaDeDatosEF.SisAccesos>' en
'System.Collections.Generic.List<CapaEntidadesNegocio.BESisAccesos>



El mensaje está bastante claro: no se puede meter dentro de una "Lista
de SisAccesos" una "Lista de BESisAccesos", a pesar de que BESisAccesos es
una clase hija de SisAccesos. En otras palabras, una clase hija se puede
meter dentro de una clase madre, pero una colección de hijas NO se puede
meter dentro de una colección de madres. Esto se llama "Variancia", y se han
vertido ríos de tinta sobre ello, pero la conclusión final es que en C# 3.0
(y anteriores) no se puede hacer, aunque está previsto que cuando salga C#
4.0 (Visual Studio 2010) sí que tenga mecanismos para conseguirlo.
De momento en C# 3.0, el remedio es no asignar la colección completa,
sino crear una colección nueva y con un bucle ir convirtiendo uno por uno
cada elemento de la colección que se asigna.
Respuesta Responder a este mensaje
#2 José Huamán La Rosa
12/08/2009 - 22:28 | Informe spam
como creo la nueva colección???

"Alberto Poblacion"
escribió en el mensaje de noticias
news:%
"José Huamán La Rosa" wrote in message
news:
[...]
public List<BESisAccesos> vOpciones = new List<BESisAccesos>();
public BLSisAccesos oBLSisAccesos = new BLSisAccesos();
[...]
*** Acá da error *** Error 1 No se puede convertir implícitamente el tipo
System.Collections.Generic.List<CapaDeDatosEF.SisAccesos>' en
'System.Collections.Generic.List<CapaEntidadesNegocio.BESisAccesos>



El mensaje está bastante claro: no se puede meter dentro de una "Lista
de SisAccesos" una "Lista de BESisAccesos", a pesar de que BESisAccesos es
una clase hija de SisAccesos. En otras palabras, una clase hija se puede
meter dentro de una clase madre, pero una colección de hijas NO se puede
meter dentro de una colección de madres. Esto se llama "Variancia", y se
han vertido ríos de tinta sobre ello, pero la conclusión final es que en
C# 3.0 (y anteriores) no se puede hacer, aunque está previsto que cuando
salga C# 4.0 (Visual Studio 2010) sí que tenga mecanismos para
conseguirlo.
De momento en C# 3.0, el remedio es no asignar la colección completa,
sino crear una colección nueva y con un bucle ir convirtiendo uno por uno
cada elemento de la colección que se asigna.


Respuesta Responder a este mensaje
#3 Alberto Poblacion
13/08/2009 - 11:11 | Informe spam
"José Huamán La Rosa" wrote in message
news:
como creo la nueva colección???




En lugar de hacer:

vOpciones =
oBLSisAccesos.ListaAccesosXUsuario(Session["UsuarioCodigo"].ToString());

Hazlo asi:

List<CapaDeDatosEF.SisAccesos> aux =
oBLSisAccesos.ListaAccesosXUsuario(Session["UsuarioCodigo"].ToString());
vOpciones = new List<BESisAccesos>();
foreach (CapaDeDatosEF.SisAccesos x in aux)
{
vOpciones.Add(x as BESisAccesos);
}

O puede que sea al revés, no sé si ya me he perdido en cuanto a cuál es
la hija y cuál es la madre, pero el caso es captar la idea general: para
convertir la colección de objetos de un tipo a una colección de objetos del
otro tipo, hay que ir convirtiendo uno por uno los miembros de la colección.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida