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 de Aplicativo Web, começando pelo SQL Server Compact 4.0 .

O Entity Framework no SQL Server Compact

Para usar o Entity Framework com o SQL Server Compact 4.0, primeiro instale o Entity Framework. O Entity Framework é um componente do .NET Framework 4.

O suporte de desenvolvimento para o SQL Server Compact 4.0 é fornecido pelo Visual Studio 2010 Service Pack 1. O suporte do Designer de Modelo de Dados de Entidade ao Entity Framework no Visual Studio 2010 Service Pack 1 é 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.

Na versão SQL Server Compact 4.0, 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 4.0 ou versões posteriores do SQL Server Compact (SSCERuntime-ENU.msi), o System.Data.SQLServerCe.Entity.dll será instalado na pasta %Arquivos de Programa%\Microsoft SQL Server Compact Edition\v4.0.

Dica

Você pode usar o SQL Server Compact 4.0 apenas com o Entity Framework 4 na versão 4 do .NET Framework. O SQL Server Compact 4.0 não dá suporte ao .NET Framework 3.5 e gera um erro.

Code First / Code Only

O SQL Server Compact 4.0 dá suporte ao modelo de programação Code First do ADO.NET Entity Framework 4. Há duas formas de criar aplicativos Web do Entity Framework: Database First e Model First. Model First é um novo recurso no ADO.NET Entity Framework 4 (.NET Framework 4) que habilita um fluxo de trabalho de desenvolvimento mais centrado em código conhecido como Code First / Code Only Development. Neste fluxo de trabalho, o CODE é seu Modelo. O modelo de programação Code First funciona desta forma:

  • Para usar Code Only, crie algumas classes POCO (Plain Old CLR Object). Elas consistem basicamente em construtores.

  • A próxima etapa é gravar uma classe que deriva do ObjectContext para descrever o formato do seu modelo e a forma de acessar suas classes POCO. Esta é uma classe ciente de Entity Framework.

Neste estágio, você tem tudo necessário para CLR, mas a classe ObjectContext não pode ser usada sem metadados Entity Framework, que são armazenados no arquivo EDMX. Em Code Only, não existe arquivo EDMX.

  • Para usar os metadados, você precisa definir ContextBuilder, em que define seu SqlConnection. O ContextBuilder verifica as propriedades do ObjectContext e infere um Modelo Conceitual padrão, um Modelo de Armazenamento e um Mapeamento por convenção. Depois, ele usa os metadados e o SqlConnection passado através do ContextBuilder para criar um EntityConnection.

  • Depois disso, uma instância do ObjectContext é criada, passando o EntityConnection ao construtor, que é criado em classes POCO.

  • Quando a instância do seu contexto é criada, você pode usar muitos métodos de extensão para:

    1. Criar automaticamente um script de banco de dados,

    2. Verificar se o banco de dados existe,

    3. Criar um banco de dados,

    4. Descartar um banco de dados etc.

Em vez de usar convenções, você também pode substituí-las. No Entity Framework 4, o ContextBuilder é refatorado em ModelBuilder e DbModel.

Para baixar, ADO.NET Entity Framework 4.

Limitações do SQL Server Compact

Estas são algumas limitações do SQL Server Compact quando ele é usado com o Entity Framework:

  • O SQL Server Compact 4.0 não dá suporte a entidades com chaves ou valores gerados pelo servidor quando ele é usado com o Entity Framework. Isso só ocorre quando o tipo de chave é Colunas de Identidade.

    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 Entity Framework permite que você defina tipos de entidade com chaves ou valores gerados pelo servidor. A operação de manipulação de dados em uma entidade com valores gerados pelo servidor que não seja do tipo Identity emite uma exceção do tipo "Não suportada".

  • A geração do Modelo de Dados de Entidade para SQL Server Compact 4.0 falhará se houver nomes de restrição duplicados no esquema do SQL Server Compact.

    No SQL Server Compact, os nomes de restrição são exclusivos em uma tabela, e isso pode permitir nomes de restrição duplicados no banco de dados. O comportamento é diferente do SQL Server, onde os nomes de restrição são exclusivos no banco de dados. Se um esquema do SQL Server Compact 4.0 tiver nomes de restrição de integridade referencial duplicados (relação chave primária – chave estrangeira), a geração do Modelo de Dados de Entidade usando o Assistente de Modelo de Dados de Entidade do Entity Framework ADO.NET falhará. Mantenha sempre o nome de restrição exclusivo no banco de dados, como, por exemplo, adicionando o nome da tabela ao nome da restrição.

  • 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)