linq를 SQL 엔티티로 업데이트하는 데 문제가 있습니다. 어떤 이유로 든 item
엔티티의 모든 필드를 이름 외에도 업데이트 할 수 있습니다.Linq to SQL - 업데이트 실패
여기에 내가 쓴 두 개의 간단한 테스트는 다음과 같습니다
[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();
당신이 이름과 다른 하나 개의 속성을 수정하면 어떻게되는지? 둘 다 또는 다른 속성 만 업데이트합니까? 또한 생성 된 코드에서 Name의 setter는'PropertyChanged' 이벤트를 발생 시키는가? DataContext는 이벤트가 발생하지 않는 한 변경 사항을 고려하지 않습니다. –
이름과 다른 속성을 수정하면 다른 속성 만 변경됩니다. –