Entity Framework 4,1 код первый, ошибка Указанный член типа ENDESC_CEP не поддерживается в LINQ to Entities - PullRequest
0 голосов
/ 23 ноября 2011

Сначала я использую код Entity Framework 4.1, для выполнения поиска ниже возвращается сообщение об ошибке: Указанный тип элемента ENDESC_CEP не поддерживается в LINQ to Entities.Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей. Это происходит при использовании параметра 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;

DAO:

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

  }
}

Tks


Мне нужно представить данные в Школе объекта Grid и связанных с ним объектахт.е. 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 только первую запись и не все, что satifizerem WHERE, следующим образом:

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

Короче говоря, я не могу, в пункте, где EnderecoEscola имеет доступ к свойству, а также не может предоставить данные EnderecoEscola для каждой записи, возвращенной из школьной организации.

Если кто-то может мне помочь, я оченьблагодарен.

Tks

Мне нужно представить данные в Школе Грид-сущности и связанных с ней сущностях, т.е. 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 только первую запись и не все, которые satifizerem WHERE, как указано ниже: item.EnderecoEscolas.Select (p => p.ENDESC_ENDERECO).First ()

Короче говоря, я не могу, в пункте, где EnderecoEscola получает доступ к свойству, а также не может принести данные EnderecoEscola для каждой записи, возвращенной из школьной организации.

Если кто-то может руководитьЯ очень благодарен.

Tks

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Ваше свойство Escola.ENDESC_CEP помечено атрибутом [NotMapped], что означает, что оно не сохраняется и не представляет столбец в базе данных.Но вы используете его в запросе LINQ to Entities: query.Where(p => p.ENDESC_CEP.Contains(sCEP) );, который представляет фильтрацию запросов к базе данных по такому (не существующему) столбцу.Это невозможно и вызывает исключение.

0 голосов
/ 23 ноября 2011

Похоже, что вы делаете .Select и проецируете полученную информацию о запросе в сопоставленный класс.Это не то, что я когда-либо видел, и я не рекомендовал бы это.Работает ли это в других местах в вашем приложении?

Если у вас есть [NotMapped] вещи, то я бы добавил в них реализацию, так что ...

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

станет (вы 'Вам нужно будет добавить проверку на ноль)

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

и использовать как:

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

Выполнение этого для каждого спроецированного свойства должно исключить необходимость выполнения полной проекции, и потенциально все может начатьсяна работу, это также может прояснить ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...