У меня проблемы с обновлением linq до sql сущностей.По какой-то причине я могу обновить каждое поле моего item
объекта, кроме name .
Вот два простых теста, которые я написал:
[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( );
}
}
}
К сожалению,TestUpdateName () завершается ошибкой со следующей ошибкой: System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'WHERE'..
А вот выходной SQL:
UPDATE [dbo]. [Items] SET WHERE ([Id] = @ p0) И ([CategoryId] = @ p1) И ([MPN] = @ p2) И ([Высота] = @ p3) И ([Ширина] = @ p4) И ([Вес] = @ p5) И ([Длина] = @ p6) AND ([AdministrativeCost] = @ p7) - @ p0: вход Int (размер = 0; точный = 0; масштаб = 0) [1] - @ p1: вход Int (размер = 0; точный= 0; Масштаб = 0) [1] - @ p2: входной VarChar (размер = 10; точный = 0; масштаб = 0) [Мой новый MPN] - @ p3: десятичный входной сигнал (размер = 0; точный = 5; Scale = 3) [30.000] - @ p4: десятичное число ввода (размер = 0; Prec = 5; масштаб = 3) [10.000] - @ p5: десятичное число ввода (Size = 0; Prec = 5; масштаб = 3)) [40.000] - @ p6: десятичный ввод (размер = 0; точный = 5; масштаб = 3) [30.000] - @ p7: денежный ввод (размер = 0; точный = 19; масштаб = 4) [350.0000]- Контекст:SqlProvider (Sql2008) Модель: AttributedMetaModel Сборка: 3.5.30729.4926
Как видите, обновление не генерируется (SET пусто ...) Понятия не имею, почему это происходит.
И уже заранее ... ДА, в таблице Item
есть PK (Id). Заранее спасибо !
Обновление: Похоже, что ошибка вызвана переопределением GetHashcode ().Это моя текущая реализация:
return string.Format( "{0}|{1}|{2}|{3}", Name, Id, UPC, AdministrativeCost).GetHashCode( );