2010-11-08 6 views
0

J'essaie d'utiliser LINQ pour insérer une ligne dans une table et la colonne ID de la table a une identification spécification:spécification d'identité ne fonctionne pas dans LINQ

CREATE TABLE [dbo].[Event](
    [ID] [int] IDENTITY(36,1) NOT NULL, 
    [Description] [nvarchar](100) NOT NULL, 
    [OccurredDateTime] [datetime] NULL, 
CONSTRAINT [PK_Event] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Je la spécification d'identité ont représenté dans mon dossier DBML dans mon projet Visual studio:

[Table(Name="dbo.Event")] 
public partial class Event : INotifyPropertyChanging, INotifyPropertyChanged 
{ 
    /* ... */ 
    [Column(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] 
    public int ID 
    { 
    /* ... */ 
    } 

    /* ... */ 
} 

Qu'est-ce qui ne va pas? Lorsque je tente d'insérer comme ceci:

Data.Event myEvent = new Data.Event(); 

myEvent.Description = summaryText; 
db.Events.InsertOnSubmit(myEvent);      
db.SubmitChanges(); 

l'exception suivante est levée:

SqlException: Impossible d'insérer la valeur NULL dans la colonne 'ID', table 'redacted.dbo.Event' ; La colonne n'autorise pas les valeurs NULL. INSERT échoue. La déclaration a été terminée

Répondre

0

J'ai essayé cette configuration - fonctionne comme un charme pour moi. Je peux insérer un nouvel objet Event - pas de problème du tout - et je récupère tout de suite la nouvelle ID ...

Etes-vous sûr que votre base de données et votre modèle sont synchronisés? La table n'est peut-être pas vraiment créée avec un INT IDENTITY ??

+0

Je pense que j'avais la mauvaise base de données spécifiée dans une chaîne de connexion. Je tente toujours d'obtenir mon test mis en place pour vérifier ... –

Questions connexes