none
Problemas com o EntityFramework 5 setando null para Objetos de uma Entidade RRS feed

  • Pergunta

  • Olá galera, estou com um problema no entity framework 5 e com SQL Server 2008, tenho uma Entidade Parceiro e nessa entidade eu tenho a referência de outras entidades como Parceiro_Endereco como no exemplo abaixo:

    [Table("Parceiro")]
        public class Parceiro : Interfaces.IEntityIDInt
        {
            /// <summary>
            /// Obtém ou determina a chave primária da tabela Parceiro
            /// </summary>
            public int ID { get; set; }
    
            /// <summary>
            /// Obtém ou determina o Nome da Razão Social do Parceiro
            /// </summary>
            [MaxLength(60)]
            [Required(ErrorMessage = "Razão Nome é um campo obrigatório")]
            public string RazaoNome { get; set; }
    
            /// <summary>
            /// Obtém ou determina o nome Fantasia do Parceiro
            /// </summary>
            [MaxLength(60)]
            [Required(ErrorMessage = "Fantasia é um campo obrigatório")]
            public string Fantasia { get; set; }
    
    /// <summary>
            /// Obtém ou determina a chave estrangeira IDEnderecoCad relacionada com a tabela Parceiro_Endereco
            /// </summary>
            public int IDEnderecoCad { get; set; }
            [ForeignKey("IDEnderecoCad")]
            public virtual Parceiro_Endereco ParceiroEnderecoCad { get; set; }
    
            /// <summary>
            /// Obtém ou determina a chave estrangeira IDEnderecoCob relacionada com a tabela Parceiro_Endereco
            /// </summary>
            public int IDEnderecoCob { get; set; }
            [ForeignKey("IDEnderecoCob")]
            public virtual Parceiro_Endereco ParceiroEnderecoCob { get; set; }
    
            /// <summary>
            /// Obtém ou determina a chave estrangeira IDEnderecoEnt relacionada com a tabela Parceiro_Endereco
            /// </summary>
            public int IDEnderecoEnt { get; set; }
            [ForeignKey("IDEnderecoEnt")]
            public virtual Parceiro_Endereco ParceiroEnderecoEnt { get; set; }
    }

    neste caso eu posso setar as informações de todos endereços como ParceiroEnderecoCad, ParceiroEnderecoCob e ParceiroEnderecoEnt ou apenas um desses endereços como eu fiz no meus testes aqui inserindo apenas o ParceiroEnderecoCad e deixando os outros null, mas quando eu executo o SaveChanges() ele da o erro de: Message = "The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_dbo.Parceiro_dbo.Parceiro_Endereco_IDEnderecoEnt\". The conflict occurred in database \"GenericData\", table \"dbo.Parceiro_Endereco\", column 'ID'.". Estou usando Entity Framework 5 com Migrations no modo Automático e a base de dados SQL Server 2008

    Como faço para resolver isso?

    Desde já agradeço a atenção de todos!

    segunda-feira, 25 de fevereiro de 2013 13:51

Todas as Respostas

  • No EF 5 você não precisa disso:

      public int IDEnderecoCad { get; set; }
            [ForeignKey("IDEnderecoCad")]
            public virtual Parceiro_Endereco ParceiroEnderecoCad { get; set; }

    Utilize apenas:

    public virtual Parceiro_Endereco ParceiroEnderecoCad { get; set; }

    O EF vai entender que é um relacionamento e vai criar o ID da Parceiro_Endereco como FK na tabela Parceiro.

    Agora certifique-se de utilizar, antes de todos as suas PK, que devem ser auto-increment, o annotation Key e DatabaseGenerated:

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

    O DatabaseGenerated(DatabaseGeneratedOption.Identity) vai dizer que o ID será auto-increment, de 1 em 1. 

    Este erro está acontecendo porque o valor gerado para o ID da sua tabela de endereço já existe, daí o SQL SERVER não deixa duplicar.


    Ao infinito e além!





    • Editado Fabio R. Luz segunda-feira, 25 de fevereiro de 2013 14:56
    segunda-feira, 25 de fevereiro de 2013 14:51