EF:同一父表上多个1对1或0

时间:2019-03-03 07:03:41

标签: c# entity-framework

我遇到类似于Entity Framework Code First : Setting up One-To-One foreign key association using Annotations

的问题

但是,我在同一父表上对同一子表有许多“可选”引用。

如果我调用CE和CA类,为简化起见,CE具有许多CA字段。因此,CA ID不能仅具有与CE相同的ID作为密钥。

我想要的是EF将CA / id识别为主键,将ConfiguracionEmpresaId识别为外键关系。只是将其添加到键中是行不通的。

我尝试了很多事情,我认为是时候寻求帮助了。

简化代码:

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

问题是我不能在子表上具有相同的父ID,它将具有重复的主键。

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

0 个答案:

没有答案