簡體   English   中英

實體框架4,1代碼優先,錯誤LINQ to Entities不支持指定的類型成員ENDESC_CEP

[英]Entity Framework 4,1 code first, error The specified type member ENDESC_CEP is not supported in LINQ to Entities

我首先使用Entity Framework 4.1代碼,要執行以下搜索,將向我返回錯誤消息:LINQ to Entities不支持指定的類型成員ENDESC_CEP。 僅支持初始化程序,實體成員和實體導航屬性。這在參數qunado SCEP時發生。 即使當參數SCEP step時,也不會加載地址數據。 誰能告訴我該怎么辦? 感謝您的幫助。

using (SecurityCtx ctx = new SecurityCtx())
    {
      ctx.Configuration.LazyLoadingEnabled = true;
      var query = ctx.Escola.Include("UnidadeFederativa").Include("Municipio").Include("EnderecoEscolas").Where(p => p.ID_EMPRESA == IdEmpresa);

      if ( (!String.IsNullOrEmpty(sUF) ) && (sUF != "ZZ") )
      {
        query = query.Where(p => p.UnidadeFederativa.UF_SIGLA == sUF);
      }

      if (!String.IsNullOrEmpty(sMunicipio))
      {
        query = query.Where(p => p.Municipio.MUN_DESCRICAO.Contains(sMunicipio.Trim()));
      }

      if ( ! String.IsNullOrEmpty( sNome ) )
      {
        query = query.Where(p => p.ESCOLA_NOME.Contains(sNome.Trim()));
      }

      if ( ! String.IsNullOrEmpty( sCodigo) )
      {
        query = query.Where(p => p.ESCOLA_CODIGO.Contains(sCodigo.Trim()));
      }

      if (!String.IsNullOrEmpty(sEndereco))
      {
        query = query.Where(p => p.EnderecoEscolas.ToList().Select( item => item.ENDESC_ENDERECO.Contains( sEndereco.Trim() ) ).First() );
      }

      if (!String.IsNullOrEmpty(sBairro))
      {
        query = query.Where(p => p.EnderecoEscolas.ToList().Select( item => item.ENDESC_BAIRRO.Contains( sBairro.Trim() ) ).First() );
      }

      if (!String.IsNullOrEmpty(sCEP))
      {
        query = query.Where(p => p.ENDESC_CEP.Contains(sCEP) );
      }

      query = query.OrderBy( p =>  p.ESCOLA_NOME.Trim()  ).ToList().Select(item => new Escola
          {
            ESCOLA_ID = item.ESCOLA_ID,
            ID_EMPRESA = item.ID_EMPRESA,
            ESCOLA_CODIGO = item.ESCOLA_CODIGO,
            ESCOLA_NOME   = item.ESCOLA_NOME,
            ESCOLA_CNPJ   = item.ESCOLA_CNPJ,
            ESCOLA_E_MAIL = item.ESCOLA_E_MAIL,
            ESCOLA_URL    = item.ESCOLA_URL,
            ESCOLA_NOME_FANTASIA = item.ESCOLA_NOME_FANTASIA,
            ESCOLA_UF_ID         = item.ESCOLA_UF_ID,
            ESCOLA_MUNICIPIO_ID  = item.ESCOLA_MUNICIPIO_ID,
            ESCOLA_REDE_ID       = item.ESCOLA_REDE_ID,
            ESCOLA_LOCAL_ID      = item.ESCOLA_LOCAL_ID,
            STATUS_MUNICIPIO_ID  = item.STATUS_MUNICIPIO_ID,
            CODIGO_NIVEL_SE_ID   = item.CODIGO_NIVEL_SE_ID,
            CODIGO_PER_PLA_DIDATICO_ID = item.CODIGO_PER_PLA_DIDATICO_ID,
            CODIGO_PER_PLA_PARADIDATICO_ID = item.CODIGO_PER_PLA_PARADIDATICO_ID,
            ESCOLA_ORIGEM_DADOS_ID         = item.ESCOLA_ORIGEM_DADOS_ID,
            ESCOLA_ATIVA                   = item.ESCOLA_ATIVA,
            ESCOLA_DATA_CADASTRAMENTO      = item.ESCOLA_DATA_CADASTRAMENTO,
            ESCOLA_DATA_ATUALIZACAO        = item.ESCOLA_DATA_ATUALIZACAO,
            UF_SIGLA                       = item.UnidadeFederativa.UF_SIGLA,
            UF_DESCRICAO                   = item.UnidadeFederativa.UF_DESCRICAO,
            MUN_DESCRICAO                  = item.Municipio.MUN_DESCRICAO,
            ENDESC_ENDERECO                = item.ENDESC_ENDERECO,
            ENDESC_NRO                     = item.ENDESC_NRO,
            ENDESC_CEP                     = item.ENDESC_CEP , 
            ENDESC_COMPL                   = item.ENDESC_COMPL , 
            ENDESC_BAIRRO                  = item.ENDESC_BAIRRO 
          }).AsQueryable();

      return query;

道:

[Table("CAD_ESCOLAS")]
  public class Escola
  {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ESCOLA_ID { get; set; }

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

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

    [StringLength(10), Required]
    [MinLength(8)]
    public string ESCOLA_CODIGO { get; set; }

    [StringLength(120), Required]
    [MinLength(20)]
    public string ESCOLA_NOME { get; set; }

    [StringLength(20)]
    public string ESCOLA_CNPJ { get; set; }

    [StringLength(120)]
    public string ESCOLA_E_MAIL { get; set; }

    [StringLength(120)]
    public string ESCOLA_URL { get; set; }

    [StringLength(80)]
    public string ESCOLA_NOME_FANTASIA { get; set; }

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

    [ForeignKey("ESCOLA_UF_ID")]
    public virtual UnidadeFederativa UnidadeFederativa { get; set; }

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

    [ForeignKey("ESCOLA_MUNICIPIO_ID")]
    public virtual Municipio Municipio { get; set; }

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

    [ForeignKey("ESCOLA_REDE_ID")]
    public virtual RedeEnsino RedeEnsino { get; set; }

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

    [ForeignKey("ESCOLA_LOCAL_ID")]
    public virtual TipoLocalizacao TipoLocalizacao { get; set; }

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

    [ForeignKey("STATUS_MUNICIPIO_ID")]
    public virtual StatusMunicipio StatusMunicipio { get; set; }

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

    [ForeignKey("CODIGO_NIVEL_SE_ID")]
    public virtual NivelSocioEconomico NivelSocioEconomico { get; set; }

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

    [ForeignKey("CODIGO_PER_PLA_DIDATICO_ID")]
    public virtual PerPlanDidatico PerPlanDidatico { get; set; }

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

    [ForeignKey("CODIGO_PER_PLA_PARADIDATICO_ID")]
    public virtual PerPlanParadidatico PerPlanParadidatico { get; set; }

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

    [ForeignKey("ESCOLA_ORIGEM_DADOS_ID")]
    public virtual OrigemDadosEsc OrigemDadosEsc { get; set; }

    [Required]
    public bool ESCOLA_ATIVA { get; set; }

    [Required]
    public DateTime ESCOLA_DATA_CADASTRAMENTO { get; set; }

    [Required]
    public DateTime ESCOLA_DATA_ATUALIZACAO { get; set; }

    [NotMapped]
    public String UF_SIGLA { get; set; }

    [NotMapped]
    public String UF_DESCRICAO { get; set; }


    [NotMapped]
    public String MUN_DESCRICAO { get; set; }

    [NotMapped]
    public String ENDESC_ENDERECO { get; set; }

    [NotMapped]
    public String ENDESC_NRO { get; set; }

    [NotMapped]
    public String ENDESC_CEP { get; set; }

    [NotMapped]
    public String ENDESC_COMPL { get; set; }

    [NotMapped]
    public String ENDESC_BAIRRO { get; set; }

    public virtual ICollection<EnderecoEscola> EnderecoEscolas { get; set; }

    public Escola()
    {
       EnderecoEscolas = new HashSet<EnderecoEscola>();
    }

  }


namespace DAL
{
  [Table("CAD_ENDERECO_ESCOLA")]
  public class EnderecoEscola
  {
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ENDESC_ID { get; set; }

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

    [ForeignKey("ESCOLA_ID")]
    public virtual Escola Escola { get; set; }

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

    [ForeignKey("TPOEND_ID")]
    public virtual TipoEndereco TipoEndereco { get; set; }

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

    [ForeignKey("ENDESC_UF_ID")]
    public virtual UnidadeFederativa UnidadeFederativa { get; set; }

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

    [ForeignKey("ENDESC_MUN_iD")]
    public virtual Municipio Municipio { get; set; }

    [StringLength(10), Required]
    [MinLength(8)]
    public string ENDESC_CEP { get; set; }

    [StringLength(100), Required]
    [MinLength(10)]
    public string ENDESC_ENDERECO { get; set; }

    [StringLength(15)]
    public string ENDESC_NRO { get; set; }

    [StringLength(25)]
    public string ENDESC_COMPL { get; set; }

    [StringLength(70)]
    public string ENDESC_BAIRRO { get; set; }

  }
}

ks


我需要在Grid實體的School和與之相關的實體(即UnidadeFederativa,Municipio和EscolaEnderecos)中顯示數據,如下所示:

select a.ESCOLA_NOME, 
       c.UF_SIGLA,
       d.MUN_DESCRICAO,
       b.ENDESC_ENDERECO, 
       b.ENDESC_BAIRRO
   from CAD_ESCOLAS a,
        CAD_ENDERECO_ESCOLA b,
        CAD_UNIDADE_FEDERATIVA c,
        CAD_MUNICIPIO          d
   where a.ESCOLA_UF_ID = c.UF_ID and
         a.ESCOLA_MUNICIPIO_ID = d.MUN_ID and
         b.ESCOLA_ID = a.ESCOLA_ID and
         b.ENDESC_CEP like '03138%'
order by 1

我僅使用[notmapped]屬性來呈現從各個相關實體返回的相同數據記錄。

事實是,我無法訪問實體EscolaEnderecos的屬性,在何處應用條件,我可以引入恢復數據EscolaEnderecos,僅恢復第一條記錄,而不能恢復所有滿足條件的WHERE子句,如下所示:

 item.EnderecoEscolas.Select (p => p.ENDESC_ENDERECO). First ()

簡而言之,我不能在條款中EnderecoEscola訪問該屬性的地方,也不能為從學校實體返回的每條記錄帶來EnderecoEscola數據。

如果有人可以指導我,我將非常感激。

ks

我需要在Grid實體的School和與之相關的實體(即UnidadeFederativa,Municipio和EscolaEnderecos)中顯示數據,如下所示:

select a.ESCOLA_NOME,  
       c.UF_SIGLA, 
       d.MUN_DESCRICAO, 
       b.ENDESC_ENDERECO,  
       b.ENDESC_BAIRRO 
   from CAD_ESCOLAS a, 
        CAD_ENDERECO_ESCOLA b, 
        CAD_UNIDADE_FEDERATIVA c, 
        CAD_MUNICIPIO          d 
   where a.ESCOLA_UF_ID = c.UF_ID and 
         a.ESCOLA_MUNICIPIO_ID = d.MUN_ID and 
         b.ESCOLA_ID = a.ESCOLA_ID and 
         b.ENDESC_CEP like '03138%' 
order by 1 

我僅使用[notmapped]屬性來呈現從各個相關實體返回的相同數據記錄。

事實是,我無法訪問實體EscolaEnderecos的屬性,在何處應用條件,我可以引入恢復數據EscolaEnderecos,僅恢復第一個記錄,而不恢復所有滿足條件的WHERE子句,如下所示:item.EnderecoEscolas.Select( p => p.ENDESC_ENDERECO)。 第一()

簡而言之,我不能在條款中EnderecoEscola訪問該屬性的地方,也不能為從學校實體返回的每條記錄帶來EnderecoEscola數據。

如果有人可以指導我,我將非常感激。

ks

您的屬性Escola.ENDESC_CEP被標記為[NotMapped]屬性,這表示該屬性未持久化並且不代表數據庫中的列。 但是您正在LINQ to Entities查詢中使用它: query.Where(p => p.ENDESC_CEP.Contains(sCEP) ); 代表通過此類(不存在)列進行的數據庫查詢過濾。 這是不可能的,並且會導致異常。

似乎您正在執行.Select並將檢索到的查詢信息投影到映射的類中。 這不是我以前見過的事情,因此我不建議這樣做。 它可以在您的應用程序的其他地方工作嗎?

如果您有[NotMapped]東西,那么我會在其中放入一個實現,所以...

[NotMapped]
public String UF_SIGLA { get; set; }

會變成(您需要添加null檢查)

[NotMapped]
public String UF_SIGLA { get { return item.UnidadeFederativa.UF_SIGLA; } }

並像這樣使用:

 query = query.OrderBy( p =>  p.ESCOLA_NOME.Trim()  ).ToList()

對每個投影屬性執行此操作應消除進行完整投影的需要,並且可能會開始起作用,這也可能會澄清錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM