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...
 

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.

Preguntas similares