2010-06-03 12 views
5

Sto scrivendo un'applicazione standalone e ho pensato di utilizzare Entity Framework per archiviare i miei dati.C# integer generazione di chiavi primarie utilizzando Entity Framework con file di database locale (Sdf)

Al momento l'applicazione è piccola, quindi posso utilizzare un file di database locale per iniziare.

Il fatto è che il file di database locale non ha la capacità di generare automaticamente chiavi primarie intere come fa SQL Server.

Non è un problema che definisce la colonna ID come "identificare" durante la creazione del tavolo, ma quando si cerca di chiamare il metodo SaveChanges getta la seguente eccezione:

{ "chiavi generate dal server ed i valori generati dal server non sono supportati da SQL Server Compact. "}

Qualche suggerimento su come gestire le chiavi primarie per le entità in un file di database locale che sarà compatibile con SQL Server in futuro?

Grazie, Ronny

+1

Quale versione di Visual Studio e SQL Server Compact Edition stai usando qui? –

+0

VS 2008 .Net Framework 3.5. Sdf versione 3.5.5692.0 – Ronny

risposta

2

Ci sono tre tecniche generali mi vengono in mente per cui il database non ha auto-numero.

1) Eseguire prima un MAX (colonna_ID) +1 per ottenere il valore ID successivo. Tuttavia, devi essere a conoscenza dei problemi con più utenti qui. Inoltre, i numeri non sono monouso. Se elimini una riga e aggiungi una nuova riga, otterrai lo stesso ID. Questo potrebbe o non potrebbe essere un problema per te.

2) Utilizzare un GUID. È praticamente garantito che sia unico, ma ha un ingombro notevole per una colonna ID.

3) Utilizzare una tabella chiavi separata che contenga l'ultimo ID assegnato. Ciò garantisce che i numeri non vengano mai riutilizzati, ma aggiunge una tabella aggiuntiva al tuo database.