Linq将非现有列添加到生成的sql查询中

时间:2018-03-28 13:25:44

标签: c# sql asp.net-mvc linq entity-framework-6

我在ASP MVC 5中的dbContext中使用LINQ。

首先,放入上下文,模型

[Table("Datos_Garantizados")]
public partial class Datos_Garantizados
{
    [Key]
    public long Version { get; set; }

    public decimal? Perdidas_Vacio { get; set; }

    public decimal? Corriente_Vacio { get; set; }

    public decimal? Perdidas_Cortocircuito_P_S { get; set; }

    public decimal? Perdidas_Cortocircuito_P_T { get; set; }

    public decimal? Perdidas_Cortocircuito_S_T { get; set; }

    public decimal? Tension_Cortocircuito_P_S { get; set; }

    public decimal? Tension_Cortocircuito_P_T { get; set; }

    public decimal? Tension_Cortocircuito_S_T { get; set; }

    public decimal? Ref_Tens_Cortocircuito_P_S { get; set; }

    public decimal? Ref_Tens_Cortocircuito_P_T { get; set; }

    public decimal? Ref_Tens_Cortocircuito_S_T { get; set; }

    public decimal? Bil_Primario { get; set; }

    public decimal? Bil_Secundario { get; set; }

    public decimal? Bil_Terciario { get; set; }

    public decimal? Aplicada_Primaria { get; set; }

    public decimal? Aplicada_Secundaria { get; set; }

    public decimal? Aplicada_Terciaria { get; set; }

    public decimal? SobreTemp_Aceite_Max { get; set; }

    public decimal? SobreTemp_Arroll_Medio { get; set; }

    public decimal? Ref_Perdidas_Cortocircuito_Primario_Secundario { get; set; }

    public decimal? Ref_Perdidas_Cortocircuito_Primario_Terciario { get; set; }

    public decimal? Ref_Perdidas_Cortocircuito_Secundario_Terciario { get; set; }

    public decimal? Potencia_Ref { get; set; }

}

背景信息:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Perdidas_Vacio)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Corriente_Vacio)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Perdidas_Cortocircuito_P_S)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Perdidas_Cortocircuito_P_T)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Perdidas_Cortocircuito_S_T)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Tension_Cortocircuito_P_S)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Tension_Cortocircuito_P_T)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Tension_Cortocircuito_S_T)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Ref_Tens_Cortocircuito_P_S)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Ref_Tens_Cortocircuito_P_T)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Ref_Tens_Cortocircuito_S_T)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Bil_Primario)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Bil_Secundario)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Bil_Terciario)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Aplicada_Primaria)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Aplicada_Secundaria)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Aplicada_Terciaria)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.SobreTemp_Aceite_Max)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.SobreTemp_Arroll_Medio)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Ref_Perdidas_Cortocircuito_Primario_Secundario)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Ref_Perdidas_Cortocircuito_Primario_Terciario)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Ref_Perdidas_Cortocircuito_Secundario_Terciario)
        .HasPrecision(18, 0);

    modelBuilder.Entity<Datos_Garantizados>()
        .Property(e => e.Potencia_Ref)
        .HasPrecision(18, 0);
}

当我尝试从表Datos_Garantizados获取列表时,查询会向查询添加不正确的列。

我试过了:

var Lista = db.Datos_Garantizados.ToList();

但是当我尝试编译它时,我得到一个SqlException:

  

“Transformador_Codigo_delfos”列中的El无效

在查询生成的SQL代码中添加了列Transformador_Codigo_Delfos,该列在数据库中不存在。

1 个答案:

答案 0 :(得分:0)

问题在于数据库设计。

我有类似的东西。

Transformador  | Datos_Garantizados | Trafo_x_Garantizados
*codigo_delfos | *version           | *version
tipo           | resistencia        | codigo_delfos
// more fields | //more fields      |

问题是一个中间表,他们建立了一个1- *关系。

我修改了数据库,如

Transformador  | Datos_Garantizados | 
*codigo_delfos | *version           | 
 tipo          | codigo_delfos      | 
// more fields | more fields        |

然后在Datos_Garantizados模型中正确添加ForeignKey到Transformador对象。

[ForeignKey("Codigo_delfos")]
public virtual Transformador Transformador { get; set; }

谢谢!