2010-04-29 10 views
4

Je viens de déplacer un de mes projets dans VS2010/fx4.0 et j'utilise une base de données SQL CE comme magasin de sauvegarde. Depuis son à cette version de .NET Je reçois maintenant cette erreur:C# 4.0/EF - Les clés générées par le serveur et les valeurs générées par le serveur ne sont pas prises en charge par SQL Server Compact

Server-generated keys and server-generated values are not supported by SQL Server Compact.

Ma table était défini avec un PK de UserName (string) & DoorOpen (datetime) comme SQLCE nécessaire il être un PK sur chaque table dans Fx3.5. Maintenant que je suis en Fx4.0, je suis perplexe. J'ai googlé pour cela et chaque réponse que j'ai trouvé:

SQLCE does not support auto-generating values (which I am most certainly not needing) so put a GUID ID on there and populate it from code.

J'ai essayé cette approche et je reçois toujours la même erreur!

SQLCE:

CREATE TABLE [ImportDoorAccesses] (
    [RawData] nvarchar(100) NOT NULL, 
    [DoorOpen] datetime NOT NULL, 
    [UserName] nvarchar(100) NOT NULL, 
    [CardNumber] bigint NOT NULL, 
    [Door] nvarchar(4000) NOT NULL, 
    [Imported] datetime NOT NULL, 
    [ID] uniqueidentifier NOT NULL -- new column 
); 

ALTER TABLE [ImportDoorAccesses] 
ADD CONSTRAINT [PK_ImportDoorAccesses] 
    PRIMARY KEY ([ID]); 

La contrainte était:

ALTER TABLE [ImportDoorAccesses] 
ADD CONSTRAINT [PK_ImportDoorAccesses] 
    PRIMARY KEY ([DoorOpen],[UserName]); 

CODE:

foreach (dto.DoorAudit newDoorAudit in dataTransferObject) 
{ 
    if (newDoorAudit.DoInsert) 
    { 
     myEntities.AddToImportDoorAccesses(new ImportDoorAccess 
     { 
      CardNumber = newDoorAudit.CardNumber, 
      Door = newDoorAudit.Door, 
      DoorOpen = newDoorAudit.DoorOpen, 
      Imported = newDoorAudit.Imported, 
      RawData = newDoorAudit.RawData, 
      UserName = newDoorAudit.UserName, 
      ID = Guid.NewGuid() // LOOK - HERE IT IS AS SUGGESTED! 
     }); 
    } 
} 
myEntities.SaveChanges(); 

Donc, maintenant quoi? Est-ce un bug dans EF4? Est-ce que je fais quelque chose de mal?

TIA


REMARQUE:

En passant par le fichier EDMX (clic droit, ouvert avec, XML) je trouve que l'une de mes colonnes de date a été fixée avec StoreGeneratedPattern = "Identité".

<EntityType Name="ImportDoorAccesses"> 
    <Key> 
     <PropertyRef Name="ID" /> 
    </Key> 
    <Property Name="RawData" Type="nvarchar" Nullable="false" MaxLength="100" /> 
    <Property Name="DoorOpen" Type="datetime" Nullable="false" /> 
    <Property Name="UserName" Type="nvarchar" Nullable="false" MaxLength="100" /> 
    <Property Name="CardNumber" Type="bigint" Nullable="false" /> 
    <Property Name="Door" Type="nvarchar" Nullable="false" /> 
    <Property Name="Imported" Type="datetime" StoreGeneratedPattern="Identity" Nullable="false" /> 
    <Property Name="ID" Type="uniqueidentifier" Nullable="false" /> 
    </EntityType> 

Je commutées puis de nouveau à la jolie vue du modèle et cliqué sur chaque colonne unique dans ma base de données pour vous assurer que ce n'était pas ensemble. Un PITA à coup sûr. On dirait qu'un petit outil parfait/add-in doit être créé ...

Répondre

3

La chose importante à vérifier est le fichier EDMX et assurez-vous que cette propriété/colonne n'a pas de StoreGeneratedPattern d'identité là-dedans.

+0

Merci. Voir ma note ci-dessus. –

Questions connexes