none
Usar entidad como variable Global RRS feed

  • Question

  • buen día..

    hay manera de usar una clase de entidad como variable global?? algo asi ...

    tengo mi entidad :

    namespace Datos.Entidades
    {
        public class Usuario
        {
            public int IdUsuario { get; set; }
            public string Sesion { get; set; }
            public string Nombres { get; set; }
            public string ApPaterno { get; set; }
    ....
            public string Correo { get; set; }        
        }
    }

    y mi clase cacheusuario:

    namespace Comun.Cache
    {
        public static class CacheUsuario
        {
            public static int IdUsuario { get; set; }
            public static string Sesion { get; set; }
            public static string Nombres { get; set; }
            public static string ApPaterno { get; set; }
    .....
            public static string Correo { get; set; }
        }
        
    }

    al final son las mismas propiedades.

    lo que no se si se pueda es :
    decir mi variable global cacheusuario es = mi entidad usuario publica y estática,
    y después al estar trabajando decir mi variable global cacheusuario=propiedades de mi entidad leída en mi modelo usuario...

    básicamente para no estar creando la clase de entidad que contiene las mismas propiedades que mi clase de cache.

    en espera de sus comentarios

    saludos y gracias.



    ASofT


    Wednesday, February 12, 2020 7:51 PM

All replies

  • hola

    Podrias aplicar herencia

        public class CacheUsuario : Usuario
        {
        }

    asi de simple, sin definir ninguna otra propiedad en al clase que hereda, poder asignar directamente una instancia en otra

    pero no aplica que definas la clase como static, denes definir la instancia

    Si quieres hacerla global defines la variable

    public class GlobalInfo{
    
        public static CacheUsuario cacheUser {get;set;}
    
    }


    ----

    Sino la otra podrias hacer uso de la libreria Automapper

    Getting Started Guides

    si defines el mapping podrias hacer

    CacheUsuario cu = mapper.Nap<CacheUsuaio>(usuario);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    Wednesday, February 12, 2020 8:25 PM
  • buen día..

    hay manera de usar una clase de entidad como variable global?? algo asi ...

    tengo mi entidad :

    namespace Datos.Entidades
    {
        public class Usuario
        {
            public int IdUsuario { get; set; }
            public string Sesion { get; set; }
            public string Nombres { get; set; }
            public string ApPaterno { get; set; }
    ....
            public string Correo { get; set; }        
        }
    }

    y mi clase cacheusuario:

    namespace Comun.Cache
    {
        public static class CacheUsuario
        {
            public static int IdUsuario { get; set; }
            public static string Sesion { get; set; }
            public static string Nombres { get; set; }
            public static string ApPaterno { get; set; }
    .....
            public static string Correo { get; set; }
        }
        
    }

    al final son las mismas propiedades.

    lo que no se si se pueda es :
    decir mi variable global cacheusuario es = mi entidad usuario publica y estática,
    y después al estar trabajando decir mi variable global cacheusuario=propiedades de mi entidad leída en mi modelo usuario...

    básicamente para no estar creando la clase de entidad que contiene las mismas propiedades que mi clase de cache.

    en espera de sus comentarios

    saludos y gracias.



    ASofT


    Y para que necesitas tener una clase como variable global??

    si solo la colocas en la parte de using... la obtienes,la referencias en los proyectos que la necesites 

    using Datos.Entidades

    en tu clase la utilizas

    Usuario.Nombre = txtNombre.text


    Wednesday, February 12, 2020 9:37 PM
  • Leandro Gracias y buen día 

    intente usar la opción de la herencia, pero al momento de utilizarla tengo 2 problemas 

    cuando intento asignar directamente

    var modelodatosusuario= new usuario();
        modelodatosusuario.IdUsuario= Usuario;
        modelodatosusuario.Nombre = Nombre;
    ....
    globalinfo.cacheuser = modelodatosusuario;

    me dice que no se puede convertir implícitamente el tipo,

    por otro lado si intento accesar las propiedades de globalinfo.cacheuser  , como idusuario, nombre .... no me deja ..??

    en espera de tus comentarios 

    saludos y gracias


    ASofT

    Thursday, February 13, 2020 4:20 PM
  • buen día greg_dorian

    la necesito global para no estar accesando a la base de datos en cada formulario que la utilice para anexar los datos del usuario a mi registro, por otro lado se me ocurrió que seria mas fácil tener actualizada mi variable global en el caso de que le anexe mas propiedades como sexo, edad ... etc.

    como me indicas que la utilice tengo entendido para que conserve su valor durante la ejecución del programa tengo que decirle que es static, pero supongo que definir static mi entidad me causara otro tipo de problemas ...??

    en espera de tus comentarios 

    saludos y gracias


    ASofT

    Thursday, February 13, 2020 4:26 PM
  • hola

    Si entiendo, no me di cuenta que una instancia de una clase base no se puede asignar a una hija, si en el sentido contrario o sea un CacheUsuario en una variable de Usuario

    La pregunta seria, porque no defines la propiedad del tipo Usuario ? porque tienes que crear la CacheUsuario si es identica


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Thursday, February 13, 2020 6:21 PM
  • buen día greg_dorian

    la necesito global para no estar accesando a la base de datos en cada formulario que la utilice para anexar los datos del usuario a mi registro, por otro lado se me ocurrió que seria mas fácil tener actualizada mi variable global en el caso de que le anexe mas propiedades como sexo, edad ... etc.

    como me indicas que la utilice tengo entendido para que conserve su valor durante la ejecución del programa tengo que decirle que es static, pero supongo que definir static mi entidad me causara otro tipo de problemas ...??

    en espera de tus comentarios 

    saludos y gracias


    ASofT

    hola angel como te dije, utiliza una clase y la referencias en los proyectos que necesitas, por lo que explicas aca necesitas una clase que accede base de datos, lee sobre arquitectura n-layered que tendrias un proyecto de infraestructura de datos que se referencie en las capas que necesites.

    un ejemplo del código de la clase que debe ir en la capa de datos seria este:

        internal class Conexion
        {
    
            private static string cadenaConexion= ConfigurationManager.ConnectionStrings["sqlConexionApp"].ConnectionString;
            private static SqlConnection conexion = new SqlConnection(cadenaConexion);
            
            public static bool Conectar()
            {
                try
                {
                    conexion.Open();
                    return true;
                }
                catch (Exception)
                {
    
                    return false;
                }
            }
    
            public static void Desconectar()
            {
                conexion.Close();
            }
    
            public static void EjecutarOperacion(string cadenaComando, List<SqlParameter> listaparametros, CommandType tipoComando)
            {
                if (Conectar())
                {
                    SqlCommand comando = new SqlCommand();
                    comando.CommandText = cadenaComando;
                    comando.CommandType = tipoComando;
                    comando.Connection = conexion;
    
                    foreach (SqlParameter parametro in listaparametros)
                    {
                        comando.Parameters.Add(parametro);
                    }
                    comando.ExecuteNonQuery();
                    Desconectar();
                }
                else
                {
                    throw new Exception("No se pudo establecer conexion");
                }
            }
    
            public static DataTable EjecutarConsulta(string sentencia, List<SqlParameter> listaparametro, CommandType tipocomando)
            {
                SqlDataAdapter adaptador = new SqlDataAdapter();
                adaptador.SelectCommand = new SqlCommand(sentencia, conexion);
                adaptador.SelectCommand.CommandType = tipocomando;
                foreach (SqlParameter parametro in listaparametro)
                {
                    adaptador.SelectCommand.Parameters.Add(parametro);
                }
                DataSet resultado = new DataSet();
                adaptador.Fill(resultado);
    
                return resultado.Tables[0];
            }
    
            public static DataTable EjecutarConsulta(string cadenaComando, CommandType tipocomando)
            {
                SqlDataAdapter adaptador = new SqlDataAdapter();
                adaptador.SelectCommand = new SqlCommand(cadenaComando, conexion);
                adaptador.SelectCommand.CommandType = tipocomando;
                            
                DataSet resultado = new DataSet();
                adaptador.Fill(resultado);
    
                return resultado.Tables[0];
            }
        }

    Thursday, February 13, 2020 8:02 PM
  • Gracias Leandro..

    bueno como te explico, soy nuevo y apenas estoy intentando saber que tanto puedo hacer o como lo puedo hacer... y por eso se me ocurrió algo así..

    intento ponerme al día con lo que encuentro en la Internet.. al haber tanta diversidad de estilos pues me enredo un poquito .. y no quiero ser pragmático, pero si me gustaria seguir buenas practias

    gracias y saludos


    ASofT

    Monday, February 17, 2020 6:22 PM
  • greg_dorian gracias

    en efecto estoy trabajando con n-capas( datos - dominio - presentación , común a la que acensan todas las capas) 

    bueno lo que quiero es tener una variable global de mi usuario ya que en su momento pretendo usar algunos datos como login,

    ahora tengo en la capa cache una clase estática que es la que uso como variable global, y trabaja bien , pero se me ocurrió agregar un cambio a la entidad y obviamente habría que agregarlo a la clase de mi variable , fue ahí que se me ocurrió saber??? si se puede hacer que mi variable sea igual a mi identidad , solo para ahorrarme el trabajo de agregar en mi otra clase los campos que se me vayan ocurriendo después... como veras soy nuevo y me gustaria saber si se puede? o no? si es necesario? es viable? o simplemente no aplica ???

    de antemano gracias por el apoyo 


    ASofT

    Monday, February 17, 2020 6:33 PM
  • greg_dorian gracias

    en efecto estoy trabajando con n-capas( datos - dominio - presentación , común a la que acensan todas las capas) 

    bueno lo que quiero es tener una variable global de mi usuario ya que en su momento pretendo usar algunos datos como login,

    ahora tengo en la capa cache una clase estática que es la que uso como variable global, y trabaja bien , pero se me ocurrió agregar un cambio a la entidad y obviamente habría que agregarlo a la clase de mi variable , fue ahí que se me ocurrió saber??? si se puede hacer que mi variable sea igual a mi identidad , solo para ahorrarme el trabajo de agregar en mi otra clase los campos que se me vayan ocurriendo después... como veras soy nuevo y me gustaria saber si se puede? o no? si es necesario? es viable? o simplemente no aplica ???

    de antemano gracias por el apoyo 


    ASofT

    -Mira como que estas redundando código, y creo que si utilizas la propiedad de herencia como dice @leandroTuttinio y/o utilizar una clase parcial, si deseas colocar algunas otras cosas y colocar los datos que pretendes adicionar, lo de clase cache no creo que deberías utilizar, la herencia es el mejor camino que debes utilizar.
    Wednesday, February 19, 2020 3:09 PM