繁体   English   中英

C#代码优先EF 6.无效的列名

[英]C# code-first EF 6. Invalid Column Name

当我尝试从表Anexos获取数据时,我得到了这个Exeption:

“执行命令定义时发生错误。有关详细信息,请参阅内部异常。”

“无效的列名'Empresas_Id'。”

然后我在我的模型中寻找Empresas_Id字段。 但..

public class Anexos
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Display(Name = "Descrição"), StringLength(150)]
    public string Descricao { get; set; }

    [StringLength(90)]
    public string Nome { get; set; }

    public string Caminho { get; set; }

    [Column("PessoaId")]
    public int? PessoaId { get; set; }

    [Column("Contrato_Id")]
    public int? ContratoId { get; set; }

    [Column("TipoDocumento_Id")]
    public int TipoDocumentoId { get; set; }

    [ForeignKey("ContratoId")]
    public virtual Contratos Contrato { get; set; }

    [ForeignKey("PessoaId")]
    public virtual Pessoas Pessoa { get; set; }

    [ForeignKey("TipoDocumentoId")]
    public virtual TipoDocumento TipoDocumento { get; set; }

}

没有Empresas_Id字段,然后我检查了我的数据库表,但是没有任何东西...... Contratos模型有字段,但我可以从中获取数据而没有错误。 这是EF的错误吗?

我检查了这个答案,试图找到我的问题:

编辑

我的表脚本:

CREATE TABLE [dbo].[Anexos] (
    [Id]               INT            IDENTITY (1, 1) NOT NULL,
    [Descricao]        NVARCHAR (150) NULL,
    [Nome]             NVARCHAR (90)  NULL,
    [Caminho]          NVARCHAR (MAX) NULL,
    [PessoaId]         INT            NULL,
    [Contrato_Id]      INT            NULL,
    [TipoDocumento_Id] INT            NOT NULL,
    CONSTRAINT [PK_dbo.Anexos] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_dbo.Anexos_dbo.Contratos_Contrato_Id] FOREIGN KEY ([Contrato_Id]) REFERENCES [dbo].[Contratos] ([Id]),
    CONSTRAINT [FK_dbo.Anexos_dbo.Pessoas_PessoaId] FOREIGN KEY ([PessoaId]) REFERENCES [dbo].[Pessoas] ([Id]),
    CONSTRAINT [FK_dbo.Anexos_dbo.TipoDocumento_TipoDocumento_Id] FOREIGN KEY ([TipoDocumento_Id]) REFERENCES [dbo].[TipoDocumento] ([Id])
);


GO
CREATE NONCLUSTERED INDEX [IX_PessoaId]
    ON [dbo].[Anexos]([PessoaId] ASC);


GO
CREATE NONCLUSTERED INDEX [IX_Contrato_Id]
    ON [dbo].[Anexos]([Contrato_Id] ASC);


GO
CREATE NONCLUSTERED INDEX [IX_TipoDocumento_Id]
    ON [dbo].[Anexos]([TipoDocumento_Id] ASC);

我的连接字符串:

  <add name="DefaultConnection" connectionString="data source=PC-TREINA09\SQLEXPRESS;initial catalog=erp10_new;integrated security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

编辑2:

Contratos表:

public class Contratos
{
    public Contratos()
    {
        Items = new HashSet<ContratoItens>();
        Anexos = new HashSet<Anexos>();
        Contas = new HashSet<ContasContasReceber>();
    }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    public int Numero { get; set; }

    public DateTime? DataContrato { get; set; }

    public DateTime? DataVenda { get; set; }

    public int? DiaDoMesCobranca { get; set; }

    public int? MesesVigencia { get; set; }

    public string Observacoes { get; set; }

    public TipoDesconto? TipoDesconto { get; set; }

    public double? ValorDesconto { get; set; }

    public double? ValorTotal { get; set; }

    public StatusContrato Status { get; set; }

    [Column("EmpresaId")]
    public int EmpresaId { get; set; }

    [Column("Cliente_Id")]
    public int ClienteId { get; set; }

    [Column("ClienteFaturamento_Id")]
    public int ClienteFaturamentoId { get; set; }

    [Column("Pagamento_Id")]
    public int? PagamentoId { get; set; }

    [ForeignKey("EmpresaId")]
    public virtual Empresas Empresa { get; set; }

    [ForeignKey("ClienteId")]
    public virtual PessoasCliente Cliente { get; set; }

    [ForeignKey("ClienteFaturamentoId")]
    public virtual PessoasCliente ClienteFaturamento { get; set; }

    [ForeignKey("PagamentoId")]
    public virtual Pagamentos Pagamento { get; set; }

    public virtual ICollection<Anexos> Anexos { get; set; }

    public virtual ICollection<ContratoItens> Items { get; set; }

    public virtual ICollection<ContasContasReceber> Contas { get; set; }
}

所以,我不知道为什么,但是,当一个发送到我的GridView作为List<T>模型它给我错误,但如果我发送使用AsEnumarable而不是ToList ,它的工作原理:

public ActionResult IndexContratos(int id)
{
     var anexos = db.Anexos
        .Include(a => a.Contrato)
        .Include(a => a.Pessoa)
        .Include(a => a.TipoDocumento)
        .Where(x => x.ContratoId == id);

      AnexosContratoTemps(id);

      return View("Grid", anexos.AsEnumerable());//Works !!
      //return View("Grid", anexos.ToList()); //Invalid column name...
}

我的视图模型是:

@model IEnumerable<Anexos> 

但是List<T>是一个IEnumarable<T> ,我真的不明白为什么ToList给我那个错误,有人可以解释一下吗?

编辑

最后(巧合)我发现了那个bug,我忘了说MyContext类中的Anexos属性是虚拟的,类似这样:

public DbSet<Anexos> Anexos { get; set; } //WRONG!
public virtual DbSet<Anexos> Anexos { get; set; }//YAYYY!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM