none
Error en entidad Relacionada Entity Framework RRS feed

  • Pregunta

  • Hola estimados buen dia a todos tengo un problema al intentar guardar con Entity Framework

    es curioso cuando llamo a un procedimiento almacenado he guardad sin problemas pero he decidido que si estoy usando Entity Framework usar las funciones de el mismo bueno tengo estos modelos o clases

    public partial class tblMaestroIngresoProducto
        {
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
            public tblMaestroIngresoProducto()
            {
                this.tblDetalleIngresoProductos = new HashSet<tblDetalleIngresoProducto>();
            }
        
            public int Id { get; set; }
            public Nullable<System.DateTime> FechaIngreso { get; set; }
            public string NumeroIngreso { get; set; }
            public Nullable<int> Usuario_id { get; set; }
        
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<tblDetalleIngresoProducto> tblDetalleIngresoProductos { get; set; }
            public virtual tblUsuario tblUsuario { get; set; }
        }

    y bueno creo una clase mas y heredo de esta clase (Esto hago con el fin de que cuando elimino o hago cambios en bd se me borran los modelos y pues se perdieron algunos métodos y no quiero que me pase lo mismo)

    y tengo desde el btn este codigo

     MaestroIngresoProductos maestroIngresoProductos = new MaestroIngresoProductos();
                    //maestroIngresoProductos.Id = 1;
                    maestroIngresoProductos.FechaIngreso = DtpFechaIngreso.Value;
                    maestroIngresoProductos.NumeroIngreso = "110";
                    maestroIngresoProductos.Usuario_id = 1;
                    MaestroIngresoProductos.InsertarMaestroProducto(maestroIngresoProductos); 

    por favor donde esta mi problema en esto.

    agradezco la colaboración

    Roberto

    martes, 14 de abril de 2020 15:38

Respuestas

Todas las respuestas

  • Hola, no hagas una herencia, sino que si te fijas en tu clase autogenereada

    public partial class tblMaestroIngresoProducto

    Es una clase parcial. Por lo que puedes usar digamos el fichero donde tienes MaestroIngresoProductos y declararla omo parcial

    Cambia 

    public class MaestroIngresoProductos : tblMaestroIngresoProducto

    por 

    public partial class tblMaestroIngresoProducto

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 14 de abril de 2020 15:47
    Moderador
  • Echa un ojo a la definición de clase parcial en Partial Classes and Methods (C# Programming Guide)

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 14 de abril de 2020 15:49
    Moderador
  • Estimado Sergio la verdad ese problema se resolvió, pero ahora tengo otro problema, no tengo acceso a los otros atributos que declaro en la clase, hice esto y declare un atributo Código

     public partial class tblMaestroIngresoProducto
        {
            public  string Codigo { get; set; }
    
            public static void InsertarMaestroProducto(CapaDatos.tblMaestroIngresoProducto maestroIngresoProducto)
            {
                using (GourmetEntities db = new GourmetEntities())
                {
                    db.tblMaestroIngresoProductos.Add(maestroIngresoProducto);
                    db.SaveChanges();
                }
            }
        }

    y vea esto 


    debo agregar CapaDatos a public static void InsertarMaestroProducto(CapaDatos.tblMaestroIngresoProducto maestroIngresoProducto) para que pierda el error.

    ahora en el boton tengo este codigo

    CapaDatos.tblMaestroIngresoProducto maestroIngresoProductos = new CapaDatos.tblMaestroIngresoProducto();
                    //CapaLogica.tblMaestroIngresoProducto maestroIngresoProductos = new CapaLogica.tblMaestroIngresoProducto();
                    maestroIngresoProductos.FechaIngreso = DtpFechaIngreso.Value;
                    maestroIngresoProductos.NumeroIngreso = "110";
                    maestroIngresoProductos.Usuario_id = 1;
                    maestroIngresoProductos.Codigo = "Codigo";
                    CapaLogica.tblMaestroIngresoProducto.InsertarMaestroProducto(maestroIngresoProductos); 

    Solo tengo acceso  los campos fechaIngreso, NumeroIngreso, Usuario_Id 

    y cuando cambio de 

    CapaDatos.tblMaestroIngresoProducto

    CapaLogica.

    tblMaestroIngresoProducto

    solo tengo acceso al campo Codigo

    que mas puede ser estimado

    Gracias

    Roberto

    martes, 14 de abril de 2020 19:31
  • hola

    >>debo agregar CapaDatos a public static void InsertarMaestroProducto(CapaDatos.tblMaestroIngresoProducto maestroIngresoProducto) para que pierda el error.

    eso es correcto, porque estas definiendo el mismo nombre de class en dos namespaces diferentes, entonces no sabes cual resolver sino se lo indicas

    Podrias poner un sufijo en el nombre como ser tblMaestroIngresoProductoDatos y tblMaestroIngresoProductoLogic para que tengas diferentes nombre

    Sino es correcto que indiques el nombre del namespace

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 14 de abril de 2020 20:51
  • Sergio, Leandro muchas gracias.

    Ahora si pude guardar los datos.

    agradeceré que me sigan ayudando

    Roberto

    martes, 14 de abril de 2020 22:06