Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A informação seguinte expõe alguns problemas que poderá encontrar nas suas aplicações LINQ to SQL e fornece sugestões para evitar ou de outra forma reduzir o efeito destes problemas.
Questões adicionais são abordadas nas Perguntas Frequentes.
Operadores de Consulta Padrão Não Suportados
LINQ para SQL não suporta todos os métodos padrão de operadores de consulta (por exemplo, ElementAt). Como resultado, projetos que compilam ainda podem produzir erros em tempo de execução. Para mais informações, consulte Tradução de Operadores de Consulta Padrão.
Problemas de Memória
Se uma consulta envolver uma coleção em memória e LINQ para SQL Table<TEntity>, a consulta pode ser executada em memória, dependendo da ordem em que as duas coleções são especificadas. Se a consulta tiver de ser executada em memória, então os dados da tabela da base de dados terão de ser recuperados.
Esta abordagem é ineficiente e pode resultar numa utilização significativa de memória e processador. Tente evitar este tipo de consultas multidomínio.
Nomes de ficheiros e SQLMetal
Para especificar um nome de ficheiro de entrada, adicione o nome à linha de comandos como ficheiro de entrada. Incluir o nome do ficheiro na string de ligação (usando a opção /conn ) não é suportado. Para mais informações, consulte SqlMetal.exe (Ferramenta de Geração de Código).
Projetos da Biblioteca de Turmas
O Object Relational Designer cria uma string de ligação no app.config ficheiro do projeto. Em projetos de biblioteca de aula, o app.config ficheiro não é utilizado. O LINQ para SQL utiliza a cadeia de ligação fornecida nos ficheiros de tempo de design. Alterar o valor em app.config não altera a base de dados à qual a sua aplicação se liga.
Eliminar em cascata
O LINQ para SQL não suporta nem reconhece operações de eliminação em cascata. Se quiser eliminar uma linha numa tabela que tem restrições, deve fazer uma das seguintes opções:
Defina a
ON DELETE CASCADEregra na restrição de chave estrangeira na base de dados.Utilize o seu próprio código para eliminar primeiro os objetos filhos, que impedem que o objeto pai seja eliminado.
Caso contrário, uma SqlException exceção é gerada.
Para mais informações, veja Como: Eliminar Linhas da Base de Dados.
Expressão Não Consultável
Se aparecer o "A expressão [expressão] não é consultável; Está a faltar-lhe uma referência de assembleia?" Erro, certifique-se do seguinte:
A sua aplicação está direcionada para o .NET Compact Framework 3.5.
Tem uma referência para
System.Core.dlleSystem.Data.Linq.dll.Tem uma diretiva
Imports(Visual Basic) ouusing(C#) usada para System.Linq e System.Data.Linq.
DuplicateKeyException
No decorrer da análise de um projeto LINQ para SQL, podem percorrer as relações de uma entidade. Ao fazê-lo, estes itens entram na cache, e o LINQ para SQL torna-se consciente da sua presença. Se depois tentar executar Attach ou InsertOnSubmit ou um método semelhante que produza várias linhas com a mesma chave, a DuplicateKeyException é lançada.
Exceções de Concatenação de Cadeias
A concatenação em operandos atribuídos a [n]text e outros [n][var]char não é suportada. É feita uma exceção para a concatenação de cadeias mapeadas para os dois conjuntos diferentes de tipos. Para mais informações, veja Métodos System.String.
Ignorar e Selecionar Exceções no SQL Server 2000
Deve usar membros de identidade (IsPrimaryKey) quando utiliza Take ou Skip numa base de dados SQL Server 2000. A consulta deve ser contra uma única tabela (ou seja, não uma junção), ou ser uma Distinct, Except, Intersect, ou Union operação, e não deve incluir uma Concat operação. Para mais informações, consulte a secção "Suporte SQL Server 2000" na Tradução Padrão de Operadores de Consulta.
Este requisito não se aplica ao SQL Server 2005.
GroupBy InvalidOperationException
Esta exceção é lançada quando o valor de uma coluna é nulo numa GroupBy consulta que agrupa por uma boolean expressão, como group x by (Phone==@phone). Como a expressão é a boolean, a chave é inferida como boolean, não nullableboolean. Quando a comparação traduzida produz um nulo, faz-se uma tentativa de atribuir nullableboolean a um boolean, e a exceção é lançada.
Para evitar esta situação (assumindo que pretende tratar os nulos como falsos), use uma abordagem como a seguinte:
GroupBy="(Phone != null) && (Phone=@Phone)"
Método Parcial OnCreated()
O método OnCreated() gerado é chamado cada vez que o construtor de objetos é chamado, incluindo o cenário em que LINQ para SQL chama o construtor para fazer uma cópia dos valores originais. Leve em consideração este comportamento se implementar o método OnCreated() na sua própria classe parcial.