Linq to SQL - Falha ao atualizar
Estou tendo alguns problemas com a atualização do linq para entidades sql. Por alguma razão, eu posso atualizar todos os campos do meuitem
entidade alémnome.
Aqui estão dois testes simples que escrevi:
[TestMethod]
public void TestUpdateName( ) {
using ( var context = new SimoneDataContext( ) ) {
Item item = context.Items.First( );
if ( item != null ) {
item.Name = "My New Name";
context.SubmitChanges( );
}
}
}
[TestMethod]
public void TestUpdateMPN( ) {
using ( var context = new SimoneDataContext( ) ) {
Item item = context.Items.First( );
if ( item != null ) {
item.MPN = "My New MPN";
context.SubmitChanges( );
}
}
}
Infelizmente, TestUpdateName () falha com o seguinte erro:System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'WHERE'..
E aqui está o SQL gerado:
UPDATE [dbo]. [Itens] SET WHERE ([Id] = @ p0) AND ([CategoryId] = @ p1) AND ([MPN] = @ p2) AND ([Height] = @ p3) AND ([Width] = @ p4) AND ([Peso] = @ p5) AND ([Comprimento] = @ p6) AND ([AdministrativeCost] = @ p7) - @ p0: Entrada Int (Tamanho = 0; Prec = 0; Escala = 0 ) [1] - @ p1: Entrada Int (Tamanho = 0; Prec = 0; Escala = 0) [1] - @ p2: Entrada VarChar (Tamanho = 10; Prec = 0; Escala = 0) [Novo MPN] - @ p3: Decimal de entrada (tamanho = 0; Prec = 5; Escala = 3) [30.000] - @ p4: Decimal de entrada (tamanho = 0; Prec = 5; Escala = 3) [10.000] - @ p5: Decimal de entrada (tamanho = 0; Prec = 5; Escala = 3) [40.000] - @ p6: Decimal de entrada (tamanho = 0; Prec = 5; Escala = 3) [30.000] - @ p7: entrada Dinheiro (tamanho = 0; Prec = 19; Escala = 4) [350.0000] - Contexto: SqlProvider (Sql2008) Modelo: AttributedMetaModel Build: 3.5.30729.4926
Como você pode ver, nenhuma atualização está sendo gerada (SET está vazio ...) Não tenho idéia do por que isso está acontecendo.
E já adiantado ... SIM, a mesaItem
tem um PK (Id).Obrigado antecipadamente!
Atualizar: Parece que o erro é causado pela substituição de GetHashcode (). Esta é minha implementação atual:
return string.Format( "{0}|{1}|{2}|{3}", Name, Id, UPC, AdministrativeCost).GetHashCode( );