2010-07-04 9 views
3

나는 DB의 간단한 스키마를 구성하는 응용 프로그램이 있습니다데이터 바인딩

네트워크 (1) -> 윈폼으로 * 상점

내가 entityframework (기본 EntityObject 코드 생성기)를 사용 내가 사용하는 데이터 바인딩을 그리드에 이들 엔티티를 되새김질하는, 내가 가진 모든 데이터 바인딩이 잘 작동하고

DbObjectModelContainer _context = new DbObjectModelContainer(); 

    _context.ContextOptions.LazyLoadingEnabled = true; 

    NetworkBindingSource.DataSource = _context.Networks;  

    ShopsBindingSource.DataSource = NetworkBindingSource; 

    ShopsBindingSource.DataMember = "Shops"; 

    NetworkBindingNavigator.BindingSource = NetworkBindingSource; 

    ShopBindingNavigator.BindingSource = ShopsBindingSource; 

    NetworkDataGridView.DataSource = NetworkBindingSource; 

    ShopDataGridView.DataSource = ShopsBindingSource; 

및 동기화, 내가 양식에 모두 그리드에 CUD없이 홍보와 _context.SaveChanges()에 갈 수 oblem.

  • 첫 번째 시나리오는

는 "+"를 NetworkBindingNavigator에 (추가)과 오른쪽 이후에 "X"가 (삭제) 그리드에이 빈 줄에 마지막으로 내가 누르면 간단한 시나리오를 이동 ~ context.SaveChanges() 문제없이 성공합니다.

  • 두 번째 시나리오

내가 눌러 "+"그리드에 빈 줄에 (삭제) ShopBindingNavigator에 (추가) 및 다음 마우스 오른쪽 나중에 내가 "X"를 눌러 마지막으로 내가 _context.SaveChanges()로 이동하십시오.

System.Data.UpdateException : 항목을 업데이트하는 중 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오. ---> System.Data.SqlClient.SqlException : 열 '위치'테이블에 NULL 값을 삽입 할 수 없습니다, 'MyDB.dbo.Shops'테이블; 열이 null을 허용하지 않습니다

제 질문은 왜 첫 번째 시나리오에서 발생하지 않았습니까 (네트워크 테이블에서도 NULL을 허용하지 않습니다)?

감사합니다.

+0

코드 또는 XML을 게시하는 경우 ** 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드"버튼 (101 010)을 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –

+0

ShopsBindingSource.datasource를 NetworkBindingSource로 설정하는 이유는 무엇입니까? 마지막 예외로 엔티티 세트로 "Shops"가 표시되지만 NetworkBindingSource는 Networks 엔터티 세트와 관련되어 있습니다 ... 뭔가 빠졌습니다. – jrista

+0

데이터 바인딩에서 데이터 바인딩을 지원하는 객체 사이에 부모 - 자식 관계가 있고 예를 들어 그리드에 묶여있을 때 동기화하려는 경우 다음을 수행해야합니다. ParentBindingSource.datasource = ; ChildBindingSource.datasource = ParentBindingSource; 마지막 예외는 "상점"이 정확하게 질문 한 것입니다. 왜 자녀 (상점) 테이블에 불만 (예외 발생)이 발생하고 동일한 실행에 대해서는 더 이상 ... – Robocide

답변

-1

NULL 값을 '위치'열, 테이블 'MyDB.dbo.Shops'에 삽입 할 수 없습니다. 열이 널을 허용하지 않으면 테이블이 널을 허용하지 않음을 의미합니다.

그래서 열이 nullable인지 여부를 확인할 수 있습니다. nullable이 아닌 경우 첫 번째 시나리오에서 성공했다고 말하면 DB를 살펴보십시오. 어떻게 든 테이블에 일부 기본값을 입력해야합니다.