none
O que tem de errado no meu código?? RRS feed

  • Pergunta

  • 		[WebMethod(Description="Delete Employees")]
    		public void deleteEmployees(int pDelEmployees)
    		{
    
    			NORTHWNDEntities ef = new NORTHWNDEntities();
    
    			var deleteEmployeesDetails =
    				from details in ef.Employees
    				where details.EmployeeID == pDelEmployees
    				select details;
    
    			ef.DeleteObject(deleteEmployeesDetails);
    			ef.SaveChanges();
    
    Estou tentando fazer um delete no banco, cara não dá certo de forma alguma... O que teria de errado nesse código? alguém poderia me ajudar? desde já obrigado.
    sexta-feira, 4 de fevereiro de 2011 11:59

Respostas

  • da uma lida aqui: http://olavooneto.wordpress.com/2011/01/26/linq-to-entity-dicas/ no topico : 2. Deletando dados de entidades relacionadas
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Heron Dantas sexta-feira, 4 de fevereiro de 2011 15:15
    sexta-feira, 4 de fevereiro de 2011 13:31
    Moderador

Todas as Respostas

  • Heron, a questão ai é que você está passando para o DeleteObject um IQueryable com os objetos que você quer deletar, o que não é aceito para este tipo de  operação. Para você fazer isto você precisa passar a entidade a ser deletada. Faça assim e veja se vai da certo:

    foreach(var employee in deleteEmployeesDetails)
    ef.DeleteObject(employee);
    ef.SaveChanges();
    
    


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    sexta-feira, 4 de fevereiro de 2011 12:18
    Moderador
  • 		[WebMethod(Description="Delete Employees")]
    		public void deleteEmployees(int pDelEmployees)
    		{
    
    			NORTHWNDEntities ef = new NORTHWNDEntities();
    
    			var deleteEmployeesDetails =
    				from details in ef.Employees
    				where details.EmployeeID == pDelEmployees
    				select details;
    
    			foreach (var employee in deleteEmployeesDetails)
    				ef.DeleteObject(employee);
    				ef.SaveChanges();
    		}
    
    

    Olavo, mais uma vez me ajudando, muito obrigado.
    Porém infelizmente, não deu certo ainda, mas vi em outro link na internet:
    http://stackoverflow.com/questions/1394286/ado-net-entity-framework-delete-rows

    Ele usa o método

    SubmitChanges();
    
    

    ao invés de:

    SaveChanges();
    
    Saberia me dizer se existe mais alguma coisa que pode estar dando errado? desde já muito obrigado Olavo

     

     

    sexta-feira, 4 de fevereiro de 2011 12:59
  • não deu certo por que ? qual foi o erro retornado ?

     

    o SubmitChange é utilizado para  DBML


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    sexta-feira, 4 de fevereiro de 2011 13:03
    Moderador
  • Olavo, segue mensagem de erro:

    System.Data.UpdateException: An error occurred while updating the entries. See the InnerException for details. ---> System.Data.SqlClient.SqlException: The DELETE statement conflicted with the REFERENCE constraint "FK_Orders_Employees". The conflict occurred in database "C:\USERS\HERON.DANTAS\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\ENTITYFRAMEWORK.PROJECT\EF\APP_DATA\NORTHWND.MDF", table "dbo.Orders", column 'EmployeeID'.
    The statement has been terminated.
      at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
      at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
      at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
      at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
      at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
      at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
      at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
      at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
      at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
      at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
      at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
      --- End of inner exception stack trace ---
      at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
      at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
      at System.Data.Objects.ObjectContext.SaveChanges(Boolean acceptChangesDuringSave)
      at System.Data.Objects.ObjectContext.SaveChanges()
      at EF.EFServices.deleteEmployees(Int32 pDelEmployees) in C:\Users\heron.dantas\Documents\Visual Studio 2010\Projects\EntityFramework.Project\EF\EFServices.asmx.cs:line 40
    

     


    sexta-feira, 4 de fevereiro de 2011 13:27
  • da uma lida aqui: http://olavooneto.wordpress.com/2011/01/26/linq-to-entity-dicas/ no topico : 2. Deletando dados de entidades relacionadas
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Heron Dantas sexta-feira, 4 de fevereiro de 2011 15:15
    sexta-feira, 4 de fevereiro de 2011 13:31
    Moderador
  • Olavo,

    Descobri meu problema a tabela Employee tem relacionamentos com a tabela Orders que também tem relacionamento com outros tabelas, ou seja esse era o meu problema.

    vlw muito obrigado seu link foi muito útil.

     

    Att

    Heron Dantas

    sexta-feira, 4 de fevereiro de 2011 15:15