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);