2012-04-28 9 views
5

la colonna chiave primaria di tipo 'tinyint' non può essere generata dal server ...LINQ to SQL inserto con chiave primaria come tinyint impostato incremento automatico dà messaggio di errore

Questo è più di una risposta di un domanda perché ho cercato questo in pila e non ho trovato alcuna domanda/risposta per aiutare.

Fondamentalmente, io stavo cercando di fare un inserto (in basso)

public void AddTask(Task task) 
{ 
    TwoDooDataContext db = new TwoDooDataContext(); 
    db.Tasks.InsertOnSubmit(task); 
    db.SubmitChanges(); 
} 

E la mia chiave primaria è stato fissato Identità vero, ma il tipo di dati è stato impostato per TinyInt ... vedere gli attributi di classe sotto

ColumnAttribute(Storage="_ID", AutoSync=AutoSync.OnInsert, 
DbType="TinyInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] 

Facendo questo ha causato il messaggio di errore:

la colonna chiave primaria di tipo 'tinyint' non può essere generato dal server di

Quindi io non riuscivo a capire questo fuori fino a quando ho potuto questo link ... http://connect.microsoft.com/VisualStudio/feedback/details/402060/accessing-a-primary-key-id-when-its-declared-as-a-tinyint-using-linq

E 'un problema noto, ma non fisso - Sto utilizzando SQL 2008 Express e VS Web Developer 2010 Esprimere.

La mia correzione era solo per cambiare il tipo di dati in Int e tutto funziona. Spero che questo aiuti in caso che qualcun altro stia cercando una soluzione.

E in realtà una domanda: qual è il tipo di dati migliore da utilizzare nel mio caso? Dovrei tenerlo come Int o cambiarlo anche se funziona? Grazie

+0

Il collegamento a connect.microsoft.com è guasto. Pagina non trovata. –

risposta

2

Gli amministratori di database hanno una bella discussione su when to use TINYINT over INT anche se non penso si applichi nel tuo caso. Se l'utilizzo di un int supera il problema noto, è necessario un buon motivo per modificarlo. Lo lascerei così com'è.

+0

Interessante leggere, grazie per il link ... E sto mantenendo l'Int! – Jason