2009-02-25 3 views
8

WPF 응용 프로그램에서 .MDF 데이터베이스를 만들었습니다.SubmitChanges()가 LINQ-to-SQL에서 작동하지 않는 이유는 무엇입니까?

그런 다음 LINQ-to-SQL 클래스를 생성하고 LINQ를 사용하여 모든 고객을 확보했습니다.

그런 다음 나는 그들을 실행하고 각각의 성을 바꿉니다.

그러나 SubmitChanges를 호출하면 데이터베이스는 변경되지 않고으로 유지됩니다.

데이터베이스 변경 사항을 제출하려면 SubmitChanges()의 목적이라고 생각했습니다.

무엇이 누락 되었습니까? 어떻게 내 데이터베이스에 "변경 사항을 제출합니까?"

public Window1() 
{ 
    InitializeComponent(); 

    Main2DataContext _db = new Main2DataContext(); 
    var customers = from c in _db.Customers 
        select c; 

    foreach (var customer in customers) 
    { 
     customer.LastName = "CHANGED lastname"; //ListBox shows changes 
    } 

    _db.SubmitChanges(); //does NOT save to database (???) 

} 
+2

이것은 정말 바보 같은 질문이지만 고객 테이블에 기본 키가 있습니까? –

+0

예 : ID는 기본 키이며 NULL을 허용하지 않으며 ID 지정이 IsIdentity = Yes로 설정됩니다. Visual Studio로 .MDF 파일을 만들었습니다. –

답변

15

나는 문제가 무엇인지 압니다. 로컬 .mdf 파일을 사용하고 있습니까? 이 경우 bin/debug 폴더를 확인하십시오. 변경 사항이있는 데이터베이스가있을 것입니다. 나는 당신이 빌드 할 때마다 bin/debug 폴더에 복사되는 프로젝트에 .mdf 파일이 있다고 생각합니다. 따라서 변경 내용이 복사본에 저장되고 프로젝트에 직접있는 복사본에 변경 내용이 반영되지 않습니다.

+0

난 그냥 이걸 통해 실행하고 올바른 것 같습니다. MDF의 bin/debug 복사본에 연결하면 변경 사항이 표시됩니다. –

+0

빙고, 그게 다야! 모든 사람들의 고집을 주셔서 감사합니다. –

+0

전이 똑같은 일을 쫓아 다니기까지 몇 시간을 소비했기 때문에 알 수 있습니다. 내가 도와 줄 수있어. – Micah

2

검색 및 변경 사이의 모든 시점에서 _db가 새 컨텍스트로 재설정되지 않는지 확인하십시오. 또한 TheListBox.ItemsSource = _db.Customers;을 수행하여 데이터 소스의 할당을 단순화 할 수 있습니다. 나는 당신이 묘사 한 것과 정확히 같은 것을하는 현재 코드에 많은 부분을 가지고 있으며, 변경 사항은 잘 전파되어있다. 추가 제안, 컨텍스트 로깅 설정 (일부 작성자에게 _db.Log 설정, 일반적으로 Console.Out을 사용하므로 디버깅 중에 출력 창에서 변경 사항을 볼 수 있음) SubmitChanges()을 호출 할 때 실제로 발생하는 변경 사항을 볼 수 있습니다.

+0

나는 _db.Log = Console.Out에 넣습니다; submitchanges 줄 앞에서는 내 출력 창에 표시되지 않거나 출력 할 위치는 어디입니까? –

+0

좋아요, 지금 코드를 최대한 단순화했습니다. 개체를 가져 와서 변경하고 SubmitChanges를 사용하여 다시 저장하지만 데이터베이스는 여전히 변경하지 않습니다. 왜 이것이 사실일까요? –

+0

디버그 모드로 실행 중이십니까? 또한 도구 -> 옵션 -> 디버깅 -> 일반에서 "모든 출력 창 텍스트를 직접 실행 창으로 리디렉션"옵션을 선택 했습니까? 그렇다면 출력이 바로 가기 창으로 이동합니다. 그렇지 않으면 StringBuilder 주위에 TextWriter를 설정하고 Log를 설정하십시오. –

관련 문제