none
Como evitar a exclusão em cascata de registros relacionados no Entity Framework RRS feed

  • Pergunta

  •  Olá como faço para evitar  que o EF delete em cascata uma categoria que esteja relacionada a um produto.(sabendo que o EF por padrão deleta todos os produtos relacionados a categoria excluida). Obrigado 


    • Editado tiagomx terça-feira, 10 de dezembro de 2013 20:06 error
    terça-feira, 10 de dezembro de 2013 20:05

Respostas

  • Cara, se eu não me engano, o EF gera os relacionamentos N para N com DELETE CASCADE ON por padrão. Você desativar isso removendo a convenção, pelo método OnModelCreating

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
       modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
    }

    Existe também a OneToManyCascadeConvention.

    É isso que você queria?


    Ao infinito e além!

    quinta-feira, 12 de dezembro de 2013 12:52
  • Boa tarde,

    Não sei como vc criou o seu mapeamento, mas se foi com o EntityTypeConfiguration do Code Firt, tenta algo assim:

    // inicio do seu codigo
    this.HasRequired(x => x.Department) .WithMany() .HasForeignKey(x => x.DepartmentId) .WillCascadeOnDelete(false);

    // fim do seu código

    Atenção a última linha onde tem o parâmetro false.


    Att, Vitor Hugo Salgado

    segunda-feira, 23 de dezembro de 2013 16:42

Todas as Respostas

  • Como você criou sua Camada!?

    Fulvio Cezar Canducci Dias

    terça-feira, 10 de dezembro de 2013 20:08
  • Vc esta perguntando sobre a camada de controller ?

    ID Produto:

    ID Categoria: ----->ID Categoria:

    NomeProduto:        NomeCategoria:

    Public virtual.....

    O que acontece e q se eu excluir uma categoria usando o crud que vem por padrao no Asp.net mvc 4 ele exclui todos os produtos 

    terça-feira, 10 de dezembro de 2013 20:13
  • Amigo!

    tem 3 Formas que podem ser gerado o Entity Framework:

    DataBaseFirst -> o banco existe e é gerado em cima dessa banco !!!

    ModelFirst -> é criado um modelo visual e ele cria todo o script de criação desse banco!!!

    CodeFirst -> cria-se o código de classes e o mesmo se não houver o banco ele cria automáticamente

    Se seu banco de dados estiver em Cascata e você gerar isso pelo DataBaseFirst ele faz isso mesmo!

    Como ta seu bancooooooooooooooooooo ! e principal como foi gerado essa camada?


    Fulvio Cezar Canducci Dias

    terça-feira, 10 de dezembro de 2013 21:06
  • e Code First Cezar e foi gerado automaticamente

    quinta-feira, 12 de dezembro de 2013 01:44
  • e Code First Cezar e foi gerado automaticamente

    Me dê os passos da geração, porque uma coisa ta estranho na sua resposta!!!

    Fulvio Cezar Canducci Dias

    quinta-feira, 12 de dezembro de 2013 11:58
  • Cara, se eu não me engano, o EF gera os relacionamentos N para N com DELETE CASCADE ON por padrão. Você desativar isso removendo a convenção, pelo método OnModelCreating

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
       modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
    }

    Existe também a OneToManyCascadeConvention.

    É isso que você queria?


    Ao infinito e além!

    quinta-feira, 12 de dezembro de 2013 12:52
  • Boa tarde,

    Não sei como vc criou o seu mapeamento, mas se foi com o EntityTypeConfiguration do Code Firt, tenta algo assim:

    // inicio do seu codigo
    this.HasRequired(x => x.Department) .WithMany() .HasForeignKey(x => x.DepartmentId) .WillCascadeOnDelete(false);

    // fim do seu código

    Atenção a última linha onde tem o parâmetro false.


    Att, Vitor Hugo Salgado

    segunda-feira, 23 de dezembro de 2013 16:42
  • Boa tarde,

    Não sei como vc criou o seu mapeamento, mas se foi com o EntityTypeConfiguration do Code Firt, tenta algo assim:

    // inicio do seu codigo
    this.HasRequired(x => x.Department) .WithMany() .HasForeignKey(x => x.DepartmentId) .WillCascadeOnDelete(false);

    // fim do seu código

    Atenção a última linha onde tem o parâmetro false.


    Att, Vitor Hugo Salgado

    Obrigado a todos pela ajuda ...todas as repostas foram uteis votei pra um abraços

    quarta-feira, 29 de janeiro de 2014 12:26