none
ASP.NET CORE MVC Relacion Muchos a Muchos RRS feed

  • Pregunta

  • Hola buenas, eh estado viendo vídeos en cuanto a relación muchos a muchos en asp.net core, pero tengo algunas dudas al respecto, para que la tabla intermedia tenga dos llaves foráneas debemos usar fluit api para indicarle cuales son esas dos llaves

    builder.Entity<EstadoCarpeta>().HasKey(x => new { x.EstadoId, x.CarpetaId });

    sin embargo, en algún tutorial solo usa las relaciones en las clases. Ahora mi consulta es si tengo una clase llamada Carpeta y otro Estado la relación es de muchos a muchos, porque una carpeta puede tener muchos estados y un estado puede pertenecer a muchas carpetas.

    CARPETA

    IdCarpeta

    Nombre

    1

    TJ0123

    2

    CH0412

    ESTADO

    IdEstado

    Nombre

    1

    TITULADO

    2

    PARALIZADO

    EstadoCarpeta

    IdEstado

    Idcarpeta

    1

    1

    1

    2

    2

    2

    1

    1

     Por qué en la BD no me deja insertar el último registro es decir la carpeta 1 tiene el estado 1, a lo largo del tiempo esta carpeta puede volver a estar en el mismo estado, pero en diferente fecha.

    Lo que hice es añadir otra llave para que me deje insertar el dato es correcto eso?

    builder.Entity<EstadoCarpeta>().HasKey(x => new { x.EstadoCarpetaId, x.EstadoId, x.CarpetaId });
    Coloco a continuación el código de las clases que uso
    public class Estado
        {
            public int EstadoId { get; set; }
            public string Nombre { get; set; }
            public ICollection<EstadoCarpeta> EstadoCarpetas { get; set; }
        }

    public class Carpeta
        {
            [Key]
            public int CarpetaId { get; set; }
            [Required(ErrorMessage = "El campo IDCarpeta es obligatorio.")]
            [MaxLength(6)]
            [MinLength(6)]
            [RegularExpression("[TJCBCH]{1,2}[0-9]{1,4}", ErrorMessage = "El formato es incorrecto Ejm. TJ0125.")]
            public string IDCarpeta { get; set; }
            [Required(ErrorMessage = "El campo AgrupacionSocial es obligatorio.")]
            public string AgrupacionSocial { get; set; }
            [Required]
            [Range(1, short.MaxValue, ErrorMessage = "El valor {0} debe ser numérico.")]
            public int Cuerpos { get; set; }
            [Required]
            [Range(1, short.MaxValue, ErrorMessage = "El valor {0} debe ser numérico.")]
            public int Fojas { get; set; }
            [Required(ErrorMessage = "El campo Poligono es obligatorio.")]
            public int Poligono { get; set; }
            [Required]
            public DateTime FechaRegistro { get; set; }
            //public List<Predio> Predios { get; set; }
            [Required]
            [ForeignKey("Departamento")]        
            public int DepartamentoId { get; set; }
            public Departamento Departamento { get; set; }
            [ForeignKey("Provincia")]   
            [BindRequired]
            public int? ProvinciaId { get; set; }
            //[Required]
            public Provincia Provincia { get; set; }
            [ForeignKey("Municipio")]        
            public int? MunicipioId { get; set; }        
            public Municipio Municipio { get; set; }
            [ForeignKey("ApplicationUser")]
            public string UserId { get; set; }
            public ApplicationUser ApplicationUser { get; set; }
            [ForeignKey("Ubicacion")]        
            public int UbicacionId { get; set; }
            public Ubicacion Ubicacion { get; set; }
            [BindRequired]
            public int EstadoId { get; }
            public ICollection<EstadoCarpeta> EstadoCarpetas { get; set; }        
        }
    public class EstadoCarpeta
        {
            [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int EstadoCarpetaId { get; set; }
            public int EstadoId { get; set; }
            public int CarpetaId { get; set; }
            public Estado Estado { get; set; }
            public Carpeta Carpeta { get; set; }
            public DateTime FechaEstado { get; set; }
        }

    • Editado SOLARONE(1) lunes, 17 de diciembre de 2018 2:18
    lunes, 17 de diciembre de 2018 2:15

Respuestas

Todas las respuestas

  • hola

     >>Por qué en la BD no me deja insertar el último registro es decir la carpeta 1 tiene el estado 1, a lo largo del tiempo esta carpeta puede volver a estar en el mismo estado, pero en diferente fecha

    no entendi, que tiene que ver el "largo del tiempo" ? no veo que defines un campo fecha en la tabla de relacion

    >>Lo que hice es añadir otra llave para que me deje insertar el dato es correcto eso?

    no, la relacion uno a mucho no requiere ese campo, no veo porque tienes que volver a relacionar algo que a esta relacionado, no tiene sentido

    Ademas porque mapeas esto usando fluent, pero el resto de la entidad lo haces usando atributos? se consistente y mapea todo de la misma forma

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 17 de diciembre de 2018 4:07

  • no entendi, que tiene que ver el "largo del tiempo" ? no veo que defines un campo fecha en la tabla de relacion

     public DateTime FechaEstado { get; set; }

    no, la relacion uno a mucho no requiere ese campo, no veo porque tienes que volver a relacionar algo que a esta relacionado, no tiene sentido

    la relacion no es uno a muchos, la relacion es muchos a muchos. y si uso fluit api es por que asi me lo pide el vs, por que si no no me deja avanzar, por que detecta error.


    lunes, 17 de diciembre de 2018 13:37
  • hola

    >>la relacion no es uno a muchos, la relacion es muchos a muchos. y si uso fluit api es por que asi me lo pide el vs, por que si no no me deja avanzar, por que detecta error.

    ok es verdad mucho a muchos, pero aplica lo mismo que comento

    se puede crear relaciones usando atributos si eso es mejor para ti

    Data Annotations - ForeignKey Attribute in EF 6 & EF Core

    igual sigue sin estar claro lo de la fecha que planteas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 17 de diciembre de 2018 14:00