Condividi tramite


Entity Framework (SQL Server Compact)

Entity Framework è un set di tecnologie in ADO.NET che supporta lo sviluppo di applicazioni software orientate ai dati. Entity Framework consente agli sviluppatori di utilizzare dati in forma di oggetti e proprietà specifici del dominio, ad esempio clienti e indirizzi dei clienti, senza che sia necessario occuparsi delle tabelle e delle colonne di database sottostanti in cui vengono archiviati i dati.

Consentendo agli sviluppatori di utilizzare i dati a un livello di astrazione superiore, Entity Framework è in grado di supportare codice indipendente da qualsiasi motore di archiviazione dei dati o schema relazionale specifico. Gli sviluppatori possono creare applicazioni di accesso ai dati effettuando la programmazione per a un modello di applicazione concettuale anziché direttamente per uno schema di archiviazione relazionale.

Le applicazioni e i servizi Entity Framework sono costituiti da un modello concettuale e uno di archiviazione e dal mapping tra i modelli. Per soddisfare le esigenze degli sviluppatori che desiderano derivare un modello EDM (Entity Data Model) da un database esistente, in Entity Framework è disponibile un set di strumenti che generano e convalidano un modello EDM e creano classi programmabili in base al modello concettuale.

Tramite EDM, ADO.NET espone entità come oggetti nell'ambiente .NET rendendo il livello oggetti una destinazione ideale per il supporto Language Integrated Query (LINQ). LINQ to Entities consente agli sviluppatori di creare query flessibili fortemente tipizzate nel contesto dell'oggetto Entity Framework utilizzando espressioni LINQ e gli operatori di query standard LINQ direttamente dall'ambiente di sviluppo. Per ulteriori informazioni su Entity Framework e LINQ to Entities, vedere la documentazione di Entity Framework.

In SQL Server Compact 3.5 SP1 è disponibile il supporto per Entity Framework per la piattaforma Windows Desktop.

Entity Framework in SQL Server Compact

Per utilizzare Entity Framework con SQL Server Compact, è necessario innanzitutto installare Entity Framework. A partire da .NET Framework 3.5 Service Pack 1 (SP1), Entity Framework è un componente di .NET Framework.

Il supporto per lo sviluppo per SQL Server Compact viene fornito da Visual Studio, mentre il supporto di Entity Data Model Designer per Entity Framework in Visual Studio viene fornito da Entity Framework Tools. Si noti che a partire da Visual Studio 2008 Service Pack 1 (SP1), Entity Data Model Designer (Entity Designer) è un componente di Visual Studio. Tale componente costituisce uno strumento di visualizzazione che consente di creare e modificare un modello EDM. Per ulteriori informazioni su questo strumento, vedere la documentazione di Entity Framework.

Se si desidera utilizzare Visual Studio 2008 anziché Visual Studio 2008 SP1, installare "Microsoft SQL Server Compact 3.5 SP1 Beta for Entity Framework Beta 3" che abilita l'integrazione tra Entity Designer e SQL Server Compact. Per ulteriori informazioni sulle modalità di installazione di questa versione beta, vedere l'Area download Microsoft.

A partire dalla versione SQL Server Compact 3.5 SP1, in SQL Server Compact è disponibile l'assembly gestito System.Data.SQLServerCe.Entity.dll. L'assembly System.Data.SQLServerCe.Entity.dll viene utilizzato internamente dal provider di dati gestito ADO.NET System.Data.SqlServerCE.dll e supporta l'accesso ai dati descritto in un modello EDM.

Quando si installa la versione SP1 di SQL Server Compact 3.5 (SSCERuntime-ENU.msi), l'assembly System.Data.SQLServerCe.Entity.dll viene installato nella cartella %Programmi%\Microsoft SQL Server Compact Edition\v3.5.

Limiti di SQL Server Compact

Di seguito vengono riportati alcuni limiti di SQL Server Compact quando viene utilizzato con Entity Framework:

  • Se utilizzato con Entity Framework, SQL Server Compact non supporta entità con chiavi o valori generati dal server.
    In caso di utilizzo di Entity Framework, le chiavi dell'entità possono essere contrassegnate come generate dal server. In questo modo il database può generare un valore per la chiave al momento dell'inserimento o della creazione dell'entità. È inoltre possibile contrassegnare come valori generati dal server zero o più proprietà di un'entità. Per ulteriori informazioni, vedere l'argomento Store Generated Pattern nella documentazione di Entity Framework.
    Se utilizzato con Entity Framework, SQL Server Compact non supporta entità con chiavi o valori generati dal server, sebbene Entity Framework consenta di definire tipi di entità con chiavi o valori generati dal server. L'operazione di manipolazione dei dati su un'entità per cui sono presenti valori generati dal server genera un'eccezione "Not supported".

  • Se utilizzato con Entity Framework, SQL Server Compact non supporta espressioni SKIP in query di paging, mentre supporta le espressioni LIMIT e TOP in tali query.
    Le query di paging sono concepite per supportare il paging senza stato (scorrimento o windowing) nei risultati di una query.
    Nell'esempio seguente viene illustrato come scrivere una query di paging in Entity Framework utilizzando gli operatori LINQ Skip e Take. Si noti che SQL Server Compact non supporta l'espressione SKIP in una query di paging:

    LINQ:

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

    Nell'esempio seguente viene illustrato come scrivere una query di paging in Entity Framework utilizzando i costrutti SKIP, LIMIT e TOP di Entity SQL. Si noti che SQL Server Compact non supporta l'espressione SKIP in una query di paging:

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name skip 10 limit 20; 
    
  • SQL Server Compact non supporta operatori full outer join che utilizzano Entity Framework, sebbene in Entity SQL tali operatori siano supportati. La query seguente, ad esempio, non è supportata:

    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
    

    Si noti che SQL Server Compact supporta operatori inner join, left outer join e right outer join che utilizzano Entity Framework.

  • SQL Server Compact non supporta sottoclausole COLLATE nella clausola ORDER BY di una query Entity SQL.
    Entity SQL consente di specificare una sottoclausola COLLATE come parte di ogni chiave in una clausola ORDER BY. La sottoclausola COLLATE è applicabile solo per espressioni con valori stringa e determina la semantica di confronto da utilizzare per l'espressione specifica.

    Se utilizzato con Entity Framework, SQL Server Compact non supporta l'utilizzo di una sottoclausola COLLATE nella clausola ORDER BY di una query Entity SQL. La query seguente, ad esempio, non è supportata:

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai 
    
  • A differenza di SQL Server, SQL Server Compact non supporta le operazioni modulo (indicate dal simbolo %) sui tipi di dati real, float, money e numeric.
    In SQL Server Compact le query seguenti provocano un messaggio di errore:

    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 si esegue una query di questo tipo, verrà visualizzato il seguente messaggio di errore: "Modulo non supportato per i tipi di dati real, float, money e numeric. [ Data type = numeric ]".

  • SQL Server Compact non supporta DISTINCT nelle funzioni di aggregazione (max, min, sum, count).
    Se si tenta di scrivere query Entity SQL e Transact-SQL che utilizzano DISTINCT in funzioni di aggregazione (max, min, sum, count), verrà generata un'eccezione "Not supported". Nell'esempio seguente viene illustrata una query Entity SQL che utilizza DISTINCT nella funzione di aggregazione count.

    Entity SQL:

    SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
    
  • Se utilizzato con Entity Framework, SQL Server Compact non supporta timeout di comando.
    Entity Framework abilita timeout per comandi da specificare tramite la proprietà ObjectContext.QueryTimeout o la proprietà EntityCommand.CommandTimeout.
    Se utilizzato con Entity Framework, SQL Server Compact non supporta timeout. Questo significa che il timeout di comando non deve essere impostato su un valore diverso da zero. Se viene impostata una proprietà relativa al timeout della connessione, nel database di SQL Server Compact viene generata un'eccezione NotSupportedException(“CommandTimeout”).

  • SQL Server Compact supporta solo stringhe Unicode.
    Entity Framework supporta sia stringhe Unicode che non Unicode, mentre SQL Server Compact supporta solo stringhe Unicode. Il valore letterale <literal> di tipo "String" non è supportato dal provider corrente. Per le stringhe non Unicode, in SQL Server Compact viene generata l'eccezione "near constant literal".

  • SQL Server Compact non supporta stored procedure e viste.

Esempio

Per informazioni sulle modalità di creazione di applicazioni Entity Framework che utilizzano il database di SQL Server Compact come origine dati, vedere Creazione di un'applicazione Entity Framework (SQL Server Compact).

Vedere anche

Altre risorse

Creazione di applicazioni gestite (SQL Server Compact)

Guida e informazioni

Assistenza (SQL Server Compact 3.5 Service Pack 1)