none
Herencia en modelo RRS feed

  • Pregunta

  • Buenas tardes, tengo esta situacion que no logro comprender a ver si pueden ayudarme.

    Tengo estos objetos:

        [Table("Persona")]
        public abstract class Persona
        {
            public int PersonaId { get; set; }
            public string Nombre { get; set; }
            public string Apellido { get; set; }
            public DateTime FechaNacimiento { get; set; }
            public int UsuarioId { get; set; }
        }

        [Table("Cliente")]
        public class Cliente : Persona
        {
            public string RFC { get; set; }
            public string Empresa { get; set; }
            public int UsuarioId { get; set; }
        }

    el problema lo tengo cuando se genera mi modelo en SQL con este campo UsuarioId, solamente lo crea en la tabla de Persona y en mi aplicacion me da el siguiente mensaje 

    'oApp.Models.Cliente.UsuarioId' hides inherited member 'oApp.Models.Persona.UsuarioId'. Use the new keyword if hiding was intended.

    Si pueden ayudarme con esto de antemano muchas gracias.


    Juan A. Reyes

    miércoles, 22 de julio de 2015 17:14

Todas las respuestas

  • Otro campo que me falto es este public int FechaActualizacion { get; set; } esto es en caso de actualizar algunos datos de la tabla Cliente almacenar la fecha de actualizacion pero de la tabla Cliente no de la tabla Persona.

    Juan A. Reyes

    miércoles, 22 de julio de 2015 17:26
  • hola

    si usas herencia porque tienes un UsuarioId ? eso no hce falta, la key debe ser una sola y estar en la clase base

    no se si usas EF Code First, pero analiza estos articulo

    mi recomendacion es que quites la propiedad UsuarioId y dejes que PersonaId sea la key de ambas tablas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de julio de 2015 18:13
  • Ok eso esta correcto lo que dices del UsuarioID pero por ejemplo hay un campo que utilizo mucho en mis tabla y es la de FechaActualizacion debe de ir en ambas tablas por que pueda ser que un usuario actualice ciertos datos de la tabla cliente y no de la tabla persona.

    Juan A. Reyes

    miércoles, 22 de julio de 2015 18:22
  • hola

    pero si sucede esto que planteas entonces no hay herencia

    sino deberias tener dos propiedades con diferente nombre para registrar esa fecha

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de julio de 2015 19:30
  • Entiendo que puede haber herencia pero en mi escenario se da el caso por ejemplo este esquema

    Persona

    Cliente, Empleado, Doctor, Proveedor

    Esas tablas heredan de persona cierto, pero en un momento determinado hay que actualizar cierta información de dichas tablas y no de la tabla persona entonces para mi es necesario tener los siguientes campos en todas las tablas

    FechaActualizacion, UsuarioActualizo

    Incluso en la tabla Persona por que puede darse tambien que desee actualizar alguna informacion de esa tabla quizas informacion mal digitada o informacion faltante osea el dia a dia de los usuarios.


    Juan A. Reyes

    miércoles, 22 de julio de 2015 19:42
  • hola

    pero me parece no estas entendiendo el concepto de herencia

    un cliente puede ser Persona pero es una entidad unica con un id por lo que tendra su fecha actualizacion propia y sera diferente a la de un doctor que tambien sera persona pero tendra su propia fecha

    el hecho de usar herencia no quiere decir que un cliente, doctor y proveedor comparten el mismo registro en la tabla de persona

    salvo que me digas que la misma persona pueede ser un cliente, proveedor y doctor al mismo tiempo ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de julio de 2015 23:08
  • En mi caso hay muchas probabilidades de que una persona pueda ser cliente o proveedor o doctor, puede darse el caso.

    Juan A. Reyes

    jueves, 23 de julio de 2015 13:08
  • hola

    >>En mi caso hay muchas probabilidades de que una persona pueda ser cliente o proveedor o doctor, puede darse el caso.

    pero es uno u otro o varios al mismo tiempo, es un "o" o es un "y" ?

    si es un "o" entonces aplica lo que comente en las respuestas anteriores

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 23 de julio de 2015 13:29
  • varios al mismo tiempo por ejemplo un cliente puede ser un proveedor al mismo tiempo

    Juan A. Reyes

    jueves, 23 de julio de 2015 14:25