35 votes

Les clés et les valeurs générées par le serveur ne sont pas prises en charge par SQL Server Compact.

Je viens de commencer à jouer avec le cadre des entités, et j'ai décidé de le connecter à ma base de données SQL Server CE existante. J'ai une table avec une clé primaire IDENTITY(1, 1) mais quand j'ai essayé d'ajouter une entité, j'ai eu l'erreur mentionnée ci-dessus.

De Article de MS Technet J'ai appris que

SQL Server Compact ne prend pas en charge les entités dont les clés ou les valeurs sont générées par le serveur lorsqu'il est utilisé avec Entity Framework. Lors de l'utilisation de l'Entity Framework, les clés d'une entité peuvent être marquées comme générées par le serveur. Cela permet à la base de données de générer une valeur pour la clé lors de l'insertion ou de la création de l'entité. En outre, zéro ou plusieurs propriétés d'une entité peuvent être marquées comme des valeurs générées par le serveur. Pour plus d'informations, voir la rubrique Store Generated Pattern dans la documentation d'Entity Framework. SQL Server Compact ne prend pas en charge les entités avec des clés ou des valeurs générées par le serveur lorsqu'il est utilisé avec l'Entity Framework, bien que l'Entity Framework vous permette de définir des types d'entités avec des clés ou des valeurs générées par le serveur. Une opération de manipulation de données sur une entité ayant des valeurs générées par le serveur déclenche une exception "Not supported".

Alors maintenant, j'ai quelques questions :

  • Pourquoi marquer la clé comme générée par le serveur si elle n'est pas prise en charge et qu'elle lève une exception ? Il est difficile de comprendre le paragraphe cité.
  • Lorsque j'ai essayé d'ajouter StoreGeneratedPattern="Identity" à la propriété de mon entité, Studio m'a signalé que cette option n'était pas autorisée. Qu'est-ce que je fais de mal ?
  • Quelle est la meilleure solution pour pallier à cette limitation (y compris le passage à une autre base de données) ? Mes limites sont l'installation zéro et l'utilisation de l'entity framework.

1voto

user544111 Points 23

L'autre option est d'utiliser SqlCeResultSet sur les tables qui ont la colonne d'identité.

0voto

Ian Points 1

J'ai une clé primaire nommée ID avec un type de données de INT32 et une colonne d'identité.

Fais juste ça

MyEntity Entity = new MyEntity() ;

String Command ;

command = "Insert into Message(Created,Message,MsgType)values('12/1/2014','Hello World',5) ; Entity.ExecuteStoreCommand(command) ;

--Exclure la clé primaire dans l'insert Statement

--Puisque le SQLCE ne supporte pas les clés générées par le système

--N'utilisez pas LINQ car il fournit une valeur par défaut de 0 pour les clés primaires dont le type de données est type de données de INT

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X