2009-11-25 6 views
3

나는 LINQ to SQL : 레코드를 뷰에 삽입하는 방법?

XXt threw exception: System.InvalidOperationException: Can't perform Create, 
Update or Delete operations on 'Table(XXX)' because it has no primary key. 

어떻게 C#을 사용보기에 레코드를 삽입하는 LINQ를 사용하여, 그것은 오류가 발생합니다, 데이터베이스 작업에 SQL로 Linq를 사용하고, 그리고보기에 삽입 작업을 수행하려고?

감사합니다.

답변

0

당신은보기에 삽입 할 수 없습니다. 표에 삽입 할 수만 있습니다.

이렇게 할 수 있습니다 - 아래를 참조하십시오.

+0

올바르지 않습니다. 아래 답변을 참조하십시오. –

+0

실제로이 대답은 잘못되었습니다. 뷰를 구성하는 테이블에서 트리거를 사용하고 뷰를 모두 처리하는 방법을 지정하면 뷰에 삽입 할 수 있습니다. – Levitikon

-2

행에 뷰를 삽입하는 대신 테이블에 행을 삽입하려고한다고 가정합니다. 뷰에 행을 삽입하지 마십시오.

오류 메시지에 표시된 것처럼 L2S는 테이블에 기본 키가 있어야합니다. 기본 키를 만들고 그에 따라 .DBML을 업데이트하면 정상이어야합니다.

랜디

4

실제로보기에 삽입 할 수 있습니다. 기본보기에 하나의 표가 있으면 삽입 할 수 있습니다.

두 개 이상의 테이블이있는 경우 트리거 대신 사용할 수 있습니다.

또한보기에 레코드를 삽입했습니다 ... linq에서 SQL로. (난 그냥 linq 자신을 배우기 시작했습니다).

보기에 기본 키를 만들어야했습니다. 디자이너를 사용하여 해당 필드의 자동 동기화를 절대로 설정하십시오. 트릭을해야합니다.

+0

가 동의합니다. Updatable Views 여기에서 자세한 정보를 확인하십시오. http://msdn.microsoft.com/en-us/library/ms187956(v=sql.90).aspx –

+0

솔직히 말해서보기에 삽입하는 사람을 본다면 아마 시작할 것입니다. !! !! – Matt

5

업데이트보기 here에 따라보기에 삽입/업데이트 할 수 있습니다. 하나의 기본 테이블 만 삽입하거나 업데이트 할 수 있습니다. 그렇지 않으면 실패합니다. LINQ를 사용하여이 기능을 구현하려면 다음을 수행하십시오. 당신하면 .dbml 파일 태그에서

  • 기본 키
  • 로보기에서 열 중 하나 (또는 ​​그 이상)는 링크로 단순히 노출/업데이 트를 삽입하는 기대 뷰의 모든 매핑을 확인 기본 테이블 열 예;
    • 삽입 가능/업데이트 가능 열은 포함 할 수 없습니다.
    • 의 ColumnName
    • ISNULL 같은
      • SUM (BaseTable.ColumnName) (BaseTable.ColumName, 0) 등의 ColumnName
      • BaseTable.ColumnName1 + ','+ BaseTable.ColumnName2
    • 그러나 포함될 수의 ColumnName
    • 등;
      • BaseTable.ColumnName
      • BaseTable.ColumnName MyNewName
  • 태그와 같은하면 .dbml에서 자동 생성 된 값으로 기본 테이블에 하지 직접 매핑되는 열 중.

사진을 찍어주세요. 이 기술을 사용하여 뷰를 레코드 읽기/삽입/업데이트에 모두 사용할 수있는 유일한 개체로 사용하고 있습니다.

2

LINQ to SQL 프로세스에서 VIEW를 사용하여 삽입, 업데이트 및 삭제 작업을 수행 할 수 있습니다. 우리가 확인해야하는 모든 것 :보기에는 기본 키가 있어야합니다.

보기의 필드에 기본 키를 설정할 수 있습니다.

.dbml 파일 디자이너를 열고 기본 키로 만들려는 필드를 선택하고 F4 (속성 창 열기)를 누릅니다.

선택한 필드의 기본 키 속성으로 true를 선택하십시오.

이제 프로그램을 실행하십시오. 그것은 작동해야합니다.

0

dbml의 자동 동기화는 'OnInsert'이어야합니다.