1

I have a problem similar to Entity Framework Code First : Setting up One-To-One foreign key association using Annotations

However, I have many "optional" references on the same parent table to same child table.

If I call classes CE and CA, to simplify, CE has a number of CA fields. CA id's, then, cannot have as key only the same id as CE.

What I want is EF to recognize CA/id as primary key and ConfiguracionEmpresaId as the foreign key relationship. Simply adding it to the keys didn't work.

I tried many things and I think is time to ask for help.

Simplified code:

 public class ConfiguracionEmpresa
    {
        [Key]
        [ForeignKey("Empresa")]
        public long Id { get; set; }

        public virtual Empresa Empresa { get; set; }

        [StringLength(200)]
        public string DirectorioTrabajo { get; set; }


        public virtual ConfiguracionArchivo Cfg_LibroMayor { get; set; }

        public virtual ConfiguracionArchivo Cfg_LibroDiario { get; set; }

        public virtual ConfiguracionArchivo Cfg_Balance { get; set; }

        public virtual ConfiguracionArchivo Cfg_DiccionarioCuentas { get; set; }

}

 public class ConfiguracionArchivo
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public long Id { get; set; }

        public long ConfiguracionEmpresaId { get; set; }

        [Required, ForeignKey("ConfiguracionEmpresaId")]        
        public virtual ConfiguracionEmpresa ConfiguracionEmpresa { get; set; }

        public int LineasCabecera { get; set; }
}

The problem is I cannot have the same parent ID on child table, it will have duplicated primary keys.

On ModelBuilder:

    modelBuilder.Entity<ConfiguracionArchivo>().HasKey(e => e.Id).HasRequired(e => e.ConfiguracionEmpresa);

    modelBuilder.Entity<ConfiguracionEmpresa>()                
        .HasOptional(d => d.Cfg_Balance).WithRequired(q => q.ConfiguracionEmpresa);
    modelBuilder.Entity<ConfiguracionEmpresa>()
        .HasOptional(d => d.Cfg_DiccionarioCuentas).WithRequired(q => q.ConfiguracionEmpresa);
    modelBuilder.Entity<ConfiguracionEmpresa>()
        .HasOptional(d => d.Cfg_LibroDiario).WithRequired(q => q.ConfiguracionEmpresa);
    modelBuilder.Entity<ConfiguracionEmpresa>()
        .HasOptional(d => d.Cfg_LibroMayor).WithRequired(q => q.ConfiguracionEmpresa);
Jorge Rojas
  • 485
  • 3
  • 10

0 Answers0