2010-01-08 2 views
1

linq to sql을 통해 표준 업데이트가 발생하지만 데이터가 데이터베이스에 유지되지 않습니다.Linq to SQL Update가 데이터베이스에 지속되지 않음

.dbml 파일 디자이너를 통해 자동 생성 클래스를 사용하고 있습니다.

업데이트 문은 다음과 같습니다 :

public static void UpdateEmailsInWorkingTable(Guid emailGuid, string modifiedEmail) 
{ 
     using (EmailDBDataContext DBContext = new EmailDBDataContext()) 
     { 
      EmailAddress_Update EAUpdated = (from e in DBContext.EmailAddress_Updates 
              where e.EmailGuid == emailGuid 
              select e).SingleOrDefault(); 

      EAUpdated.EmailAddress = modifiedEmail; 
      EAUpdated.IsValid = 'Y'; 
      EAUpdated.UpdateFlag = true; 
      EAUpdated.LastChangedDtTm = DateTime.Now; 
      try 
      { 
       DBContext.SubmitChanges(ConflictMode.FailOnFirstConflict); 
      } 
      catch (ChangeConflictException ex) 
      { 
       // do stuff here 
      } 
     } 
} 

나는 내 자동 생성의 DataContext 클래스를 통해 보았다 유일한 눈부신 차이는 문제의 테이블 EmailAddress_Update 두 인터페이스 INotifyPropertyChanging를 구현하지 않는다는 것입니다 다른 것을에서 INotifyPropertyChanged 자동 생성 엔티티가 수행합니다.

이것이 변경 사항이 지속되지 않는 이유라고 가정합니다.

간단히 말해서 확장 성 정의가이 클래스의 일부에 대해 생성되지 않습니다. 이게 내 문제의 원인이라면 데이터베이스에서 자동 생성이 제대로되지 않는 원인이 무엇일까요 ??

덕분에 ~

+3

try catch 블록에서 EmailContext는 DBContext로 가정됩니까? –

+0

예 죄송합니다. 수정해서 거기에 변경하는 것을 잊어 버렸습니다. 원래 문제는 아니지만 내 부분에는 오타가 없습니다. –

+0

'SingleOrDefault'를 호출하면'EAUpdated'가 널 포인터가 될 수 있다는 사실을 잘 처리 할 수 ​​있습니다. null 케이스를 처리하고 싶지 않으면 'Single'을 호출해야합니다. –

답변

2

여기뿐만 아니라 MSDN에서이 질문을 게시 : MSDN Linq to Sql를 당신은 응답을보고 싶어합니다. 그러나 코드가 생성되지 않는 이유의 일부를 발견했습니다.

내가 기본 키없이 작은 테스트 테이블을 만든 디자이너에 추가하고 있는지 충분히 그 인스턴스의 확장 방법 중 하나를 생성하지 않은 : 여기

내 MSDN 응답에서 조각이다.

그래서 동일한 테이블에 기본 키를 추가하고이를 디자이너에 다시 추가하고 모든 확장 성 방법과 변경 추적 이벤트가 생성되었는지 확인하십시오.

지금 내 질문에 왜 자동 생성을위한 기본 키가 있어야합니까?

0

내 자신의 질문에 대답하기 위해 "이제 내 질문에 자동 생성을위한 기본 키가 있어야합니까?" 나는 테이블 비교 뷰를 처리하는 방법을 읽고 있었다 그가 말한다

, 조 조셉 C. Rattz에 의해 쓰여진 책 프로 LINQ에서 주니어

그것을 발견이 :보기에 대해 생성 된 엔티티 클래스 그렇지

"때문에 기본 키로 매핑 된 엔티티 클래스 속성을 포함하고 있으며 읽기 전용입니다. 기본 키가 없으면 DataContext에 ID 추적을 제공하는 효과적인 방법이 없다고 생각하면 의미가 있습니다. "

수수께끼와 문제가 해결되었습니다.