O Damien Guard, do gurpo Data Programmability da Microsoft postou uma longa lista de mudanças no LINQ to SQL. Apesar de eles ainda estarem compromissados com o Entity Framework no longo prazo, isso vai aliviar o medo de que o LINQ to SQL será totalmente negligenciado no meio tempo.
PerformanceUsabilidade
- Planos de execução de query são mais freqüentemente reusados ao se definir comprimentos dos parâmetros de texto
- Busca em cache por chaves primárias com resultados únicos agora incluem query.Where(predicado).Single/SingleOrDefault/First/FirstOrDefault
- Redução da carga extra na execução da query quando DataLoadOptions está especificado (a busca em cache considera a equivalência do valor do DataLoadOptions – pós beta 1)
Estabilidade das queries
- Interface ITable para aumentar as possibilidades de mocks
- Chamada do método Contains com enums automaticamente convertidos para int ou string dependendo do tipo da coluna
- Associações agora podem especificar colunas sem chave primária do outro lado da associação para updates
- Suporte à sintaxe de inicialização de listas para queries
- LinqDataSource agora suporte entidades herdadas
- Adicionado suporte no LinqDataSource para extensões de query DynamicData
Estabilidade do update
- Método Contains agora detecta IQueryable auto-referenciado e não causa stack overflow
- Método Skip(0) não mais impede eager loading
- Método GetCommand opera dentro de transações do SQL Compact
- Expor o Link em uma propriedade ou variável é detectado e reportado corretamente
- Queries compiladas agora detectam corretamente uma mudança no mapeamento e lançam uma exceção.
- Métodos String.StartsWith, EndsWith e Contains agora lidam corretamente com o “~” (til) na string de busca
- Agora se detecta multiple active result sets (MARS) melhor
- Associações entre entidades são corretamente detectadas quando se usa eager loading com Table-Value Functions (TVFs)
- Queries que contém sub-queries com projeções escalares funcionam melhor
Estabilidade geral
- SubmitChanges não mais consome exceções de rollback de transações silenciosamente
- SubmitChanges lida direito com timestamps em um cenário de conflito
- IsDbGenerated agora respeita propriedades renomeadas que não combinam com o nome da sua coluna
- Colunas geradas pelo servidor e triggers/replicações SQL agora funcionam ao invés de lançarem exceção SQL
SQL Metal
- Tipos binaries igualam-se corretamente após a de-serialização
- EntitySet.ListChanged é chamado quando adiciona-se itens a uma lista de entidades não carregada
- Conexões são eliminadas assim que o contexto é eliminado (aquelas passadas são intocadas)
Editor de classes LINQ to SQL
- Propriedades com chaves estrangeiras agora verificam todas as associações afetadas e não apenas a primeira
- Melhor gerenciamento de erro quando o tipo da chave primária não é suportado
- Stored Procedures com contendo parâmetros table-value são ignoradas ao invés de abortarem o processo
- Agora pode ser utilizado com conexões que utilizam a síntaxe AttachDbFilename
- Não trava mais quando tipos de dados inesperados são encontrados
Geração de código (SQL Metal + editor de classes LINQ to SQL)
- Agora lida com resultados com uma coluna anônima do SQL
- Melhora no gerenciamento de mensagens para associações com colunas únicas que podem receber null
- Não falha mais quando cláusulas using são adicionadas às classes parciais do usuário
- VarChar(1) agora é mapeado corretamente para string ao invés de char
- Precisão e escala do Decimal agora são corretamente emitidas nos atributes DbType para stored procedures
- Mudanças em chaves estrangeiras serão aplicadas quando se trouxer tabelas de volta para o editor sem se reiniciá-lo
- Stored procedures utilizando valores originais agora compilam mesmo que o namespace da entidade e do contexto sejam diferentes
- Declarações virtual internal agora geram sintaxe correta
- Atributos de mapeamento agora são plenamente qualificados para se evitar conflitos com tipos do usuário
- Os KnownTypeAttributes agora são emitidos para o DataContractSerializer com herança
- Chaves estrangeiras com carregamento atrasado agora têm seu código correto e compilável gerado
- Utilizar stored procedures com concorrência não mais torna-se confuso se as entidades estão em um namespace diferente do contexto
- ForeignKeyReferenceAlreadyHasValueException é lançada se qualquer associação for carregada e não só a primeira