Será que apagar a partir de um LINQ DB também excluir registros em outras tabelas que têm uma associação de chave estrangeira?

StackOverflow https://stackoverflow.com/questions/2009327

Pergunta

Assim, na raiz do meu DB, eu tenho uma tabela "Cliente". Cliente tem chaves estrangeiras indo para cerca de 6-7 outras mesas tais como recibos, endereços, documentos etc. Se eu fosse para excluir um cliente usando SubmitChanges (), teria que procurar todos os registros com a associação de chave estrangeira e excluí-los também, ou que eu preciso fazer como 6 consultas?

Foi útil?

Solução

Isso só vai acontecer se você tiver configurado suas tabelas de banco de dados para fazer isso com cascata eliminações (ou seja on delete cascade).

Para obter mais informações, consulte Insert, Update, e operações de exclusão (LINQ para SQL) :

LINQ to SQL não suporta ou reconhecer as operações em cascata-delete. Se você quiser excluir uma linha em uma tabela que tem restrições contra ele, você ou deve definir o ON DELETE CASCADE governar na restrição de chave externa na o banco de dados, ou utilizar o seu próprio código para primeiro excluir os objetos filho que impedir o objecto principal do sendo excluída. Caso contrário, uma exceção é lançada.

Outras dicas

Que tipo de ação em cascata que você tem sobre estas relações de chave estrangeira ??

Por padrão, a maioria dos sistemas de banco de dados (incluindo SQL Server, que eu presumo que você usa) não terá qualquer "ON CASCADE DELETE" ou qualquer outra ação -. Então, nesse caso, nada aconteceria

Esta consulta T-SQL irá mostrar-lhe os seus relacionamentos de chave estrangeira e se ou não quaisquer ações DELETE ou UPDATE referencial foram definidos:

SELECT
    name 'FK Constraint',
    OBJECT_NAME(parent_object_id) 'Parent table',
    OBJECT_NAME(referenced_object_id) 'Referenced table',
    delete_referential_action ,
    delete_referential_action_desc ,
    update_referential_action ,
    update_referential_action_desc 
FROM 
    sys.foreign_keys

Se você deseja que algo aconteça, você precisa ter certeza essas relações FK são definidas para usar essas ações em cascata.

Veja a documentação do MSDN sobre cascata integridade referencial para mais detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top