none
Erro ao tentar salvar classe com dependencia RRS feed

  • Pergunta

  • Olá, estou tendo um problema estranho.

    Ao tentar salvar minha classe USUARIO, que depende de ter a classe EMPRESA e PESSOA salva dá o errro:

    Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.


    O estranho é que acontece somente quando a classe está assim:

    public class Usuario
    {
      [Key]
      public int UsuarioID { get; set; }
    
      public int PessoaID { get; set; }
    
      [Required]
      [Display(Name = "Login")]
      public string Login { get; set; }
    
      [Required]
      [Display(Name = "Nome")]
      public string Nome { get; set; }
              
      [Display(Name = "Senha")]
      [StringLength(50)]
      [DataType(DataType.Password)]
      public string Senha { get; set; }
    
      public string Chave { get; set; }
      public Nullable<DateTime> DtAtivacao { get; set; }
      public string Gestor { get; set; }
    
      [Display(Name = "Tipo de liberação")]
      public string TipoLiberacao { get; set; }
      [Display(Name = "Tipo de cadastro")]
      public string TipoCadastro { get; set; }
    
      /* Campos fixos */
      public int? EmpresaID { get; set; }
      public string Fixo { get; set; }
      public string Status { get; set; }
      public string Apagado { get; set; }
      public DateTime? DtApagado { get; set; }
      public int? UsuCad { get; set; }
      public DateTime DtCad { get; set; }
      public int? UsuAlt { get; set; }
      public DateTime DtAlt { get; set; }
      public int? UsuUltAlt { get; set; }
      public DateTime DtUltAlt { get; set; }
    
      [ForeignKey("UsuCad")]        
      public virtual Usuario UsuarioCad { get; set; }
      [ForeignKey("UsuAlt")]        
      public virtual Usuario UsuarioAlt { get; set; }
      [ForeignKey("UsuUltAlt")]
      public virtual Usuario UsuarioUltAlt { get; set; }
      [ForeignKey("EmpresaID")]        
      public virtual Empresa Empresa { get; set; }
    }

    E desta forma não dá erro:

    public class Usuario
    {
      [Key]
      public int UsuarioID { get; set; }
    
      public int PessoaID { get; set; }
    
      [Required]
      [Display(Name = "Login")]
      public string Login { get; set; }
    
      [Required]
      [Display(Name = "Nome")]
      public string Nome { get; set; }
              
      [Display(Name = "Senha")]
      [StringLength(50)]
      [DataType(DataType.Password)]
      public string Senha { get; set; }
    
      public string Chave { get; set; }
      public Nullable<DateTime> DtAtivacao { get; set; }
      public string Gestor { get; set; }
    
      [Display(Name = "Tipo de liberação")]
      public string TipoLiberacao { get; set; }
      [Display(Name = "Tipo de cadastro")]
      public string TipoCadastro { get; set; }
    
      /* Campos fixos */
      public int? EmpresaID { get; set; }
      public string Fixo { get; set; }
      public string Status { get; set; }
      public string Apagado { get; set; }
      public DateTime? DtApagado { get; set; }
      public int? UsuCad { get; set; }
      public DateTime DtCad { get; set; }
      public int? UsuAlt { get; set; }
      public DateTime DtAlt { get; set; }
      public int? UsuUltAlt { get; set; }
      public DateTime DtUltAlt { get; set; }
    }

    E mais estranho é que tenho a estrutura como abaixo em outras classes e não dá pau...

      [ForeignKey("UsuCad")]        
      public virtual Usuario UsuarioCad { get; set; }
      [ForeignKey("UsuAlt")]        
      public virtual Usuario UsuarioAlt { get; set; }
      [ForeignKey("UsuUltAlt")]
      public virtual Usuario UsuarioUltAlt { get; set; }
      [ForeignKey("EmpresaID")]        
      public virtual Empresa Empresa { get; set; }

    att

    Marlon Tiedt
    www.sesmt.com.br

    quarta-feira, 28 de novembro de 2012 16:00

Respostas

  • Ontem estava fazendo um teste e descobri o problema.

    Se usa-se usuário 1 como padrão para salvar os dados não dava erro.
    Mas o EF usa 0 para dizer que não tem nada, e eu tinha cadastrado a EMPRESA, USUARIO e PESSOA padrão como código ZERO.

    Alterei o cadastro padrão para 1, e tudo voltou a funcionar...

    Valeus...


    Marlon Tiedt
    www.sesmt.com.br

    • Marcado como Resposta Marlon Tiedt quinta-feira, 29 de novembro de 2012 18:20
    quinta-feira, 29 de novembro de 2012 18:20

Todas as Respostas

  • Parece que o EF  não sabe qual dos seus usuários salvar primeiro.

    Algumas dessas propriedades esta nula?

    public virtual Usuario UsuarioUltAlt { get; set; }

    quarta-feira, 28 de novembro de 2012 18:43
  • Ontem estava fazendo um teste e descobri o problema.

    Se usa-se usuário 1 como padrão para salvar os dados não dava erro.
    Mas o EF usa 0 para dizer que não tem nada, e eu tinha cadastrado a EMPRESA, USUARIO e PESSOA padrão como código ZERO.

    Alterei o cadastro padrão para 1, e tudo voltou a funcionar...

    Valeus...


    Marlon Tiedt
    www.sesmt.com.br

    • Marcado como Resposta Marlon Tiedt quinta-feira, 29 de novembro de 2012 18:20
    quinta-feira, 29 de novembro de 2012 18:20