2009-10-25 2 views
0

나는 정말 LINQ 초보자입니다. 이 방법을 사용하는 경우SubmitChanges() 필드를 1 개만 업데이트 하시겠습니까?

public static int save(TEntity obj) 
    { 
     var table = dbo.GetTable<TEntity>(); 
     var mapping = dbo.Mapping.GetTable(typeof(TEntity)); 
     var pkfield = mapping.RowType.DataMembers.Where(d => d.IsPrimaryKey).Take(1).SingleOrDefault(); 
     if (Convert.ToInt32(obj.GetType().GetProperty(pkfield.Name).GetValue(obj, null)) == 0) 
      table.InsertOnSubmit(obj); 
     try 
     { 
      dbo.SubmitChanges(); 
     } 
     catch (ChangeConflictException e) 
     { 
      dbo.SubmitChanges(); 
     } 
     if (dbo.ChangeConflicts.Count == 0) 
     { 
      ClearCache(dbo); 
      return Convert.ToInt32(obj.GetType().GetProperty(pkfield.Name).GetValue(obj, null)); 
     } 
     else 
     { 
      dbo.ChangeConflicts.ResolveAll(System.Data.Linq.RefreshMode.KeepCurrentValues); 
      return 0; 
     } 
    } 

는 만 1 필드가 업데이트되어 있습니다 !! : 나는 알 수없는 문제가있어 여기 내 기록은 다음과 같습니다.

UPDATE [dbo].[tbl_album] 
SET [dt_m_date] = @p1 
WHERE [i_album_id] = @p0 
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1] 
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [1256485605] 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4918 

거의 모든 필드가 변경 되어도 내 테이블에는 기본 키가 이미 있습니다. 그러나 여전히 문제.

도와주세요!

답변

0

save 방법을 통해 코드 수행의 결과를 확인 했습니까? 올바른 기본 키 열을 찾았는지 실제로 기존 기본 키의 존재를 감지 했습니까?

tbl_album의 필드 - 읽기 전용으로 표시되지 않았는지 확인 했습니까 (그래도 계속 확인하십시오).

근본적으로 코드에 문제가있는 것은 아닙니다. 내 취향에 조금 복잡해 보이지만 작동해야합니다.

마크

UPDATE :
확인이 테이블 열이 모두 읽기 전용하지 있는지 확인하기! :)

alt text http://i35.tinypic.com/mt8sw2.png

+0

Marc. 나는 그 방법을주의 깊게 조사했다. 나는 아직도이 쓰레기가 왜 발생하는지 모른다. SubmitChanges()가 실행될 때까지는 모두 괜찮습니다. 모든 필드에는 충분한 set & get 메서드가 있습니다. –

+0

내 코드가 너무 길어서 여기에 모든 코드를 가져올 수 없기 때문에. 어쨌든 대부분의 열은 다음 속성으로 설정됩니다. [Column (Name = "i_artist_id", Storage = "_ArtistID", DbType = "Int NOT NULL DEFAULT 0", CanBeNull = false, UpdateCheck = UpdateCheck.Never) ] '읽기 전용'속성에 대해 무엇을 의미합니까? 이런 건 찾지 못했습니다. 또한 데이터베이스에는 '읽기 전용'필드가 없습니다. Marc! 감사합니다. –

+0

Marc, 확인했지만 모든 읽기 전용은 거짓입니다. 어떤 합리적인 방법이 있습니까? –

0

테스트를 많이 한 후, 나는 한 가지를 발견 : 모든 외래 키가 업데이트되지 않습니다, 일반 필드 괜찮아. 이 합법적 인 방법으로 이런 헛소리가 나왔다고 말해줘?

나는 많은 것을 봤지만 아무 것도 발견하지 못했습니다 ...

관련 문제