VS2005 / VS2008 DataSet desenhador, inserir uma linha numa tabela que tem uma coluna guid auto-gerada

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

Pergunta

Eu tenho um DataTable fortemente tipado criado com o designer VS2005 / VS2008 DataSet.

A tabela tem uma coluna de chave primária que é um guid, que é preenchido pelo servidor SQL. O problema é quando eu quero adicionar uma linha (ou várias linhas) para o meu DataTable e depois chamar o DataAdapter.Update método (passando o DataTable). Quando DataAdapter.Update é chamado recebo uma exceção SQL dizendo que eu não pode inserir NULL na coluna de chave primária.

Como posso dizer ao designer que essa é uma coluna gerada automaticamente e eu não quero fornecer um valor para novas linhas? Eu só quero que o valor gerado pelo SQL.

Am I faltando alguma coisa aqui, ou esta é uma limitação do designer DataSet?

Eu sei como conseguir isso usando LINQ to SQL, mas unfortunatley eu não tê-lo à minha disposição para este projeto.

Foi útil?

Solução

Possivelmente um destes:

  • Se você não precisa a coluna em seu DataSet para o seu aplicativo, em seguida, removê-lo.
  • Se você deseja que a coluna, mas não me importo de dar-lhe um valor, então alterá-lo para permitir DBNull.
  • Você sempre pode desligar a aplicação da restrição (provavelmente uma má idéia): DataSet.EnforceConstraints = false
  • Você poderia encher a coluna com uma chave substituta que não são enviados para o DB.

Para as duas primeiras opções, se você quiser a conveniência de deixar o designer manter sua estrutura em sincronia com seu banco de dados, então você pode remover a coluna ou permitir nulo programaticamente, talvez ao lado de uma "// Hack:" comentário explicando o porquê.

Outras dicas

Você está problably usando NEWID PADRÃO () em sua definição da tabela SQL Server de modo que o problema pode ser que o designer Dataset não vê esta coluna como auto-gerado.

Talvez gerando guid no código do aplicativo pode ser uma solução? Se não, então você pode definir o valor padrão em você Dataset, mas então você provavelmente também tem que mudar declarações DataAdapter insert / update para que esse valor padrão não se inseridos na tabela do SQL Server.

Há também poderia ser alguma outra solução que eu não estou ciente de ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top