我在更新Linq to 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) AND ([CategoryId] = @p1) AND ([MPN] = @p2) AND ([Height] = @p3) AND ([Width] = @p4) AND ([Weight] = @p5) AND ([Length] = @p6) AND ([AdministrativeCost] = @p7) -- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1] -- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [1] -- @p2: Input VarChar (Size = 10; Prec = 0; Scale = 0) [My New MPN] -- @p3: Input Decimal (Size = 0; Prec = 5; Scale = 3) [30.000] -- @p4: Input Decimal (Size = 0; Prec = 5; Scale = 3) [10.000] -- @p5: Input Decimal (Size = 0; Prec = 5; Scale = 3) [40.000] -- @p6: Input Decimal (Size = 0; Prec = 5; Scale = 3) [30.000] -- @p7: Input Money (Size = 0; Prec = 19; Scale = 4) [350.0000] -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926
可以看到,没有生成任何更新(SET 为空...)我不知道为什么会出现这种情况。
还有提前说明一下...是的,表 Item
有一个 PK(Id)。谢谢!
更新: 看起来错误是由于覆盖 GetHashcode() 导致的。 这是我的当前实现:
return string.Format( "{0}|{1}|{2}|{3}", Name, Id, UPC, AdministrativeCost).GetHashCode( );