Entity Framework (SQL Server Compact)

O Entity Framework é um conjunto de tecnologias do ADO.NET que suporta o desenvolvimento de aplicativos de software orientados a dados. O Entity Framework permite aos desenvolvedores trabalhar com dados na forma de propriedades e objetos específicos de domínio, como clientes e endereços de clientes, sem se preocupar com as tabelas e colunas do banco de dados subjacente em que os dados estão armazenados.

O Entity Framework permite que os desenvolvedores trabalhem com dados em maior nível de abstração para suportar código independente de qualquer mecanismo de armazenamento de dados específico ou esquema relacional. Os desenvolvedores podem criar aplicativos de acesso a dados programando com base em um modelo de aplicativo conceitual, em vez de diretamente com base em um esquema de armazenamento relacional.

Os aplicativos e serviços do Entity Framework consistem em um modelo conceitual e um de armazenamento, além de um mapeamento entre ambos. Para atender às necessidades dos desenvolvedores que desejam derivar um EDM (Modelo de Dados de Entidade) de um banco de dados existente, o Entity Framework fornece um conjunto de ferramentas que geram e validam um EDM e criam classes programáveis com base no modelo conceitual.

Através do EDM, o ADO.NET expõe entidades como objetos no ambiente .NET. Isso torna a camada de objeto um destino ideal para suporte a LINQ (consulta integrada à linguagem). O LINQ to Entities permite que os desenvolvedores criem consultas flexíveis e com rigidez de tipos com base no contexto de objeto do Entity Framework utilizando expressões LINQ e os operadores de consulta padrão LINQ diretamente no ambiente de desenvolvimento. Para obter mais informações sobre o Entity Framework e o LINQ to Entities, consulte a documentação do Entity Framework.

O SQL Server Compact oferece suporte ao Entity Framework para a plataforma Windows Desktop, começando pelo SQL Server Compact 3.5 Service Pack 1 (SP1).

O Entity Framework no SQL Server Compact

Para usar o Entity Framework com o SQL Server Compact, primeiro instale o Entity Framework. O Entity Framework é um componente do .NET Framework a partir do .NET Framework 3.5 Service Pack 1 (SP1).

O suporte de desenvolvimento ao SQL Server Compact é oferecido pelo Visual Studio. O suporte do Designer de Modelo de Dados de Entidade ao Entity Framework no Visual Studio é oferecido pelas Ferramentas do Entity Framework. Observe que o Designer de Modelo de Dados de Entidade (Designer de Entidade) é um componente do Visual Studio a partir do Visual Studio 2008 Service Pack 1 (SP1). Trata-se de uma ferramenta visual usada para criar e editar um EDM. Para obter mais informações sobre essa ferramenta, consulte a documentação do Entity Framework.

A partir do SQL Server Compact versão 3.5 SP1, o SQL Server Compact fornece um assembly gerenciado: System.Data.SQLServerCe.Entity.dll. O assembly do System.Data.SQLServerCe.Entity.dll é usado pelo provedor de dados gerenciados do ADO.NET System.Data.SqlServerCE.dll internamente e suporta o acesso aos dados descritos em um EDM.

Quando você instalar o SQL Server Compact 3.5 SP1 ou versões posteriores do SQL Server Compact (SSCERuntime-ENU.msi), o System.Data.SQLServerCe.Entity.dll será instalado na pasta %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5.

Limitações do SQL Server Compact

A seguir estão algumas limitações do SQL Server Compact quando ele é usado com o Entity Framework:

  • O SQL Server Compact não suporta entidades com chaves ou valores gerados pelo servidor quando usado com o Entity Framework.

    Ao usar o Entity Framework, as chaves de uma entidade podem estar marcadas como se fossem geradas pelo servidor. Isso permite que o banco de dados gere um valor para a chave na inserção ou criação da entidade. Além disso, zero ou mais propriedades de uma entidade podem estar marcadas como se fossem valores gerados pelo servidor. Para obter mais informações, consulte o tópico Store Generated Pattern na documentação do Entity Framework.

    O SQL Server Compact não suporta entidades com chaves ou valores gerados pelo servidor quando usado com o Entity Framework, apesar de que o Entity Framework permite definir tipos de entidade com chaves ou valores gerados pelo servidor. A operação de manipulação de dados em uma entidade que tenha valores gerados pelo servidor emite uma exceção do tipo "Não suportada".

  • O SQL Server Compact não suporta expressões SKIP em consultas de paginação quando usado com o Entity Framework. Em contrapartida, o SQL Server Compact suporta as expressões LIMIT e TOP nas consultas de paginação.

    As consultas de paginação têm como objetivo suportar a paginação sem monitoração de estado (rolagem ou janelas) através dos resultados de uma consulta.

    O exemplo a seguir demonstra como escrever uma consulta de paginação no Entity Framework usando os operadores LINQ Skip e Take. Observe que o SQL Server Compact não suporta a expressão SKIP em uma consulta de paginação:

    LINQ:

    customers.OrderBy(c => c.Name).Skip(10).Take(20) 
    

    O exemplo a seguir demonstra como escrever uma consulta de paginação no Entity Framework usando as construções SKIP, LIMIT e TOP do Entity SQL. Observe que o SQL Server Compact não suporta a expressão SKIP em uma consulta de paginação:

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name skip 10 limit 20; 
    
  • O SQL Server Compact não suporta junções externas completas que usam o Entity Framework, apesar de que Entity SQL suporta junções externas completas. Por exemplo, a consulta a seguir não é suportada:

    Entity SQL:

    SELECT c.Name, c.Id, o.Id 
    FROM NW.Customers AS c 
    FULL OUTER JOIN NW.Orders AS o ON c.Id = o.CustomerId
    

    Observe que o SQL Server Compact suporta junções internas, junções externas esquerdas e junções externas direitas que usam o Entity Framework.

  • O SQL Server Compact não suporta subcláusulas COLLATE na cláusula ORDER BY de uma consulta Entity SQL.

    O Entity SQL permite que uma subcláusula COLLATE seja especificada como parte de cada chave em uma cláusula ORDER BY. A subcláusula COLLATE é aplicável somente para expressões com valor de cadeia de caracteres e determina a semântica de comparação a ser usada para essa expressão.

    O SQL Server Compact, quando usado com o Entity Framework, não suporta o uso de uma subcláusula COLLATE na cláusula ORDER BY de uma consulta Entity SQL. Por exemplo, a consulta a seguir não é suportada:

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai 
    
  • Diferentemente do SQL Server, o SQL Server Compact não suporta operações de módulo (denotadas por %) em tipos de dados real, float, money e numeric.

    No SQL Server Compact, as consultas a seguir geram uma mensagem de erro:

    Entity SQL:

    ( CAST ( 1 AS Edm.Int16) % CAST ( 1 AS Edm.Decimal) ) 
    

    Transact-SQL:

    SELECT cast (1 as smallint) %cast (1 as decimal(28,4)) 
    

    Quando você executa essa consulta, a mensagem de erro a seguir é exibida: "Não há suporte para o módulo nos tipos de dados real, float, money e numeric. [ Tipo de dados = numeric ]"

  • O SQL Server Compact não suporta DISTINCT em agregações (max, min, sum, count).

    Se você tentar escrever consultas Entity SQL e Transact-SQL que usam DISTINCT em agregações (max, min, sum, count), será emitida uma exceção do tipo "Não suportado". O exemplo a seguir demonstra uma consulta Entity SQL que usa DISTINCT na agregação count.

    Entity SQL:

    SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
    
  • O SQL Server Compact não suporta tempos limites de comando quando usado com o Entity Framework.

    O Entity Framework permite tempos limites para que comandos sejam especificados usando a propriedade ObjectContext.QueryTimeout ou a propriedade EntityCommand.CommandTimeout.

    O SQL Server Compact não suporta tempos limites quando usado com o Entity Framework. Em outras palavras, o tempo limite de comando não deve ser definido como um valor diferente de zero. Se for definida uma propriedade de tempo limite de conexão, será emitida uma exceção NotSupportedException(“CommandTimeout”) pelo banco de dados do SQL Server Compact.

  • O SQL Server Compact suporta somente cadeias de caracteres Unicode.

    O Entity Framework oferece suporte a cadeias de caracteres Unicode e não-Unicode. O SQL Server Compact suporta somente cadeias de caracteres Unicode. A literal <literal> de tipo 'Cadeia de caracteres' não tem suporte do provedor atual. A exceção "literal quase constante" é emitida pelo SQL Server Compact em cadeias de caracteres não-Unicode.

  • O SQL Server Compact não suporta procedimentos armazenados e exibições.

Exemplo

Para saber como criar aplicativos do Entity Framework que usam o banco de dados do SQL Server Compact como fonte de dados, consulte Criando um aplicativo do Entity Framework (SQL Server Compact).

Consulte também

Outros recursos

Criando aplicativos gerenciados (SQL Server Compact)