2010-06-03 6 views
5

J'écris une application autonome et j'ai pensé utiliser Entity Framework pour stocker mes données. Pour l'instant, l'application est petite, donc je peux utiliser un fichier de base de données local pour commencer. Le fait est que le fichier de base de données local n'a pas la capacité de générer automatiquement des clés primaires entières comme le fait SQL Server.Génération de clé primaire C# entier à l'aide d'Entity Framework avec fichier de base de données local (Sdf)

Ce n'est pas un problème définissant la colonne ID comme « identifier » lors de la création de la table, mais en essayant d'appeler la méthode SaveChanges il jette l'exception suivante:

{ "clés générées par le serveur et les valeurs générées par le serveur ne sont pas supportés par SQL Server Compact. "}

Des suggestions sur la façon de gérer les clés primaires pour les entités dans un fichier de base de données local qui sera compatible avec SQL Server à l'avenir?

Merci, Ronny

+1

Quelle version de Visual Studio et de SQL Server Compact Edition utilisez-vous ici? –

+0

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

Répondre

2

Il existe trois techniques générales que je peux penser pour savoir où la base de données n'a pas de numérotation automatique.

1) Faites d'abord un MAX (colonne ID) +1 pour obtenir la prochaine valeur d'ID. Cependant, vous devez être conscient des problèmes multi-utilisateurs ici. De plus, les chiffres ne sont pas à usage unique. Si vous supprimez une ligne et ajoutez une nouvelle ligne, vous obtiendrez le même ID. Cela peut ou peut ne pas être un problème pour vous.

2) Utilisez un GUID. Assez garanti pour être unique, mais a une grande empreinte pour une colonne d'identification.

3) Utilisez une table de clé distincte qui contient le dernier ID affecté. Cela garantit que les numéros ne sont jamais réutilisés, mais ajoute une table supplémentaire dans votre base de données.