Progettista DataSet VS2005 / VS2008, inserire una riga in una tabella con una colonna guida generata automaticamente

StackOverflow https://stackoverflow.com/questions/806590

Domanda

Ho creato una DataTable fortemente tipizzata creata con il designer DataSet VS2005 / VS2008.

La tabella ha una colonna Chiave primaria che è una guida, che viene popolata dal server SQL. Il problema è quando voglio aggiungere una riga (o più righe) alla mia DataTable e quindi chiamare DataAdapter.Update metodo (passando nella DataTable). Quando viene chiamato DataAdapter.Update ricevo un'eccezione SQL che dice che I impossibile inserire NULL nella colonna della chiave primaria.

Come faccio a dire al designer che si tratta di una colonna generata automaticamente e non voglio fornire un valore per le nuove righe? Voglio solo il valore generato da SQL.

Mi manca qualcosa qui o è una limitazione del designer DataSet?

So come raggiungere questo obiettivo usando LINQ to SQL, ma sfortunatamente non ce l'ho a disposizione per questo progetto.

È stato utile?

Soluzione

Forse uno di questi:

  • Se non hai bisogno della colonna nel tuo DataSet per la tua app, rimuovila.
  • Se vuoi la colonna ma non ti interessa dargli un valore, allora modificala per consentire DBNull.
  • Puoi sempre disattivare l'applicazione del vincolo (probabilmente una cattiva idea): DataSet.EnforceConstraints = false
  • È possibile riempire la colonna con una chiave surrogata che non viene inviata al DB.

Per le prime due opzioni, se si desidera la comodità di consentire al progettista di sincronizzare la propria struttura con il proprio database, è possibile rimuovere la colonna o consentire null a livello di codice, magari proprio accanto a un " // HACK: " ; commento che spiega perché.

Altri suggerimenti

Probabilmente stai utilizzando DEFAULT NEWID () nella definizione della tabella di SQL Server, quindi il problema potrebbe essere che il progettista del set di dati non vede questa colonna come generata automaticamente.

Forse generare guid nel codice dell'applicazione potrebbe essere una soluzione? In caso contrario, potresti impostare il valore predefinito nel tuo set di dati, ma probabilmente dovrai anche modificare le istruzioni di inserimento / aggiornamento di DataAdapter in modo che questo valore predefinito non venga inserito nella tabella Server SQL.

Potrebbe esserci anche un'altra soluzione di cui non sono a conoscenza ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top