none
Como deletar um relacionamento muitos-para-muitos RRS feed

  • Pergunta

  • Olá pessoal,

    Estava pesquisando na internet e vi no forum o seguinte exemplo:

    | [Project] | <-- | [JobInProject] | --> | [Job] |
    =============     ==================     =========
    | ProjectID |     | JobInProjectID |     | JobID |
    |           |     | ProjectID      |     |       |
    |           |     | JobID          |     |       |

    Quero deletar todos JobInProject relacionados a um Project

    Pelo que pesquisei posso fazer de duas maneiras:

    • Utilizando delete cascade
    • Ou setando dessa maneira:

    foreach (var item in project.JobInProjects) { db.Entry(item.Job).State = EntityState.Deleted; }

    Estou certo?

    Minha segunda dúvida é a seguinte. Tenho um projetinho com o seguinte relacionamento:

    Cliente possui zero ou muitos Pedidos

    O teste que estou querendo fazer é o seguinte:

    public void Alterar(int id)
    {
        cliente_tb cliente = base.SelecionarId(p => p.cliente_id == id);
    
        cliente.pedido_tb.Clear();
    
        base.Atualizar(cliente);
        base.SalvarTodos();
    }

    Está ocorrendo esse erro:

    The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.

    Minha classe Repositório está assim:

    public void Atualizar(TEntity obj)
            {
                ctx.Entry(obj).State = EntityState.Modified;
            }
    
            public void SalvarTodos()
            {
                ctx.SaveChanges();
            }

    Para ele 'atualizar' o pedido eu preciso adicionar o objeto pedido_tb dentro da ctx.Entry?

    ctx.Entry(obj_pedido_tb).State = EntityState.Modified;

    Se tiver, existe uma outra forma automatica de se fazer? Onde eu passo um objeto e o entity se vira para saber o que tem que atualizar?

    Grato

    quarta-feira, 27 de julho de 2016 19:19

Todas as Respostas