Linq to SQL dbml 파일을 어떻게 업데이트합니까?


204

Linq to SQL .dbml 파일을 어떻게 업데이트합니까?

답변:


258

모델을 동기화 상태로 유지하는 세 가지 방법이 있습니다.

  1. 디자이너에서 수정 된 테이블을 삭제하고 데이터베이스 탐색기에서 디자이너 화면으로 다시 끕니다. 나는 이것이 안정적으로 작동하려면 다음을 수행해야한다는 것을 알았습니다.

    ㅏ. 데이터베이스 탐색기에서 데이터베이스 스키마를 새로 고칩니다 (오른쪽 클릭, 새로 고침)
    b. 테이블을 삭제 한 후 디자이너를 저장하십시오
    . c. 테이블을 다시 끈 후 다시 저장하십시오.

    당신이 (협회의 자식 속성 끄기 예를 들어) 어떤 속성을 수정 한 경우 즉, 이것은 분명히 그 수정을 잃게됩니다 불구하고 - 당신이 다시 확인해야합니다.

  2. SQLMetal을 사용하여 데이터베이스에서 스키마를 재생성하십시오. 나는 이것을 스크립트하는 방법을 보여주는 많은 블로그 게시물을 보았다 .

  3. DBML의 특성 분할 창에서 직접 변경하십시오. 이것은 필드에 널 허용과 같은 간단한 변경에 적용됩니다.

DBML 디자이너는 Visual Studio 2015, 2017 또는 2019에 기본적으로 설치되어 있지 않습니다. VS를 닫고 VS 설치 관리자를 시작한 다음 설치를 수정해야합니다. SQL 도구에 LINQ를 설치해야하는 기능입니다. VS 2017/2019의 경우 개별 구성 요소> 코드 도구 에서 찾을 수 있습니다 .


1
1b없이 1a와 1c를 시도했지만보기에서 간단한 선택을 수행 할 때 '지정된 캐스트가 유효하지 않습니다'오류가 발생했습니다. 1b 포함하여 나를 위해 수정
tomfumb

6
은 VS 지원에 요청 된 connect.microsoft.com/VisualStudio/feedback/details/260723/... 하지만, MS는 수정을 원하지 않는다.
Michael Freidgeim 2016 년

첫 번째 방법을 시도해 보았습니다. 작은 DB에서 작동한다고 생각합니다.
Muhammedh

2019 년 말에 컴퓨터 프로그래밍이 무엇인지 알기 전에 만든 대답이 필요하다는 것이 고통 스럽습니다 ... 이것은 매우 상세하고 훌륭합니다!
PSGuy

54

예를 들어 열을 추가하여 .dbml-diagram의 테이블을 업데이트하려면 다음과 같이하십시오.

  1. SQL Server 탐색기 창을 업데이트하십시오.
  2. 테이블의 "새"버전을 .dbml-diagram (아래 그림의 report1)으로 드래그하십시오.

report1은 테이블의 새 버전입니다.

  1. 테이블의 새 버전에서 추가 된 열을 표시하고 Ctrl+ C를 눌러 추가 된 열을 복사하십시오.

추가 된 열을 복사

  1. 테이블의 "이전"버전을 클릭하고 Ctrl+ V를 눌러 추가 된 열을 이미 존재하는 테이블 버전에 붙여 넣습니다.

추가 된 열을 이전 버전의 테이블에 붙여 넣기


4
이것은 추가 도구를 필요로하지 않고 VS2017에서 잘 작동하는 가장 쉽고 가장 파괴적인 방법 인 것 같습니다
Toby

1
이것은 허용 된 답변보다 훨씬 덜 관용적이며 2018 년 말에도 계속 잘 작동합니다!
Mark

1
이것은 스키마에 대한 빠른 수정 및 빠른 편집에 가장 적합한 답변입니다. 모델 뷰를보기 좋게 만드는 데 많은 시간이 걸렸습니다. 업데이트 파일을 삭제하고 드래그하는 것을 싫어했습니다. 추가 된 필드의 경우이 기능이 훌륭합니다!
Hucker

1
나에게 이것은 두 가지 문제를 해결했다. 첫 번째는 테이블 내에서 비슷한 필드를 복사하여 붙여 넣은 다음 이름을 바꾸려고했습니다. 유효성을 검사 할 때 논스톱 "지정되지 않은"빌드 오류가 발생했습니다. 다른 문제는 테이블을 제거한 다음 전체를 다시 추가하면 git에서 훨씬 더 큰 차이가 발생한다는 것입니다 (객체가 파일 내에서 재 배열 되었기 때문에). 이 방법을 사용하면 새 필드를 삽입하는 것만 볼 수 있습니다.이 필드는 훨씬 더 깔끔하고 나중에 이해하기 쉽습니다.
goug December

BTW, "디자이너에 추가하는 개체가 디자이너와 다른 데이터 연결을 사용합니다 ..."라는 메시지가 표시되면 "예"를 클릭해야합니다.
Eitanmg

5

또한 Linq-to-SQL과 관련하여 깔끔한 작업을 수행 할 수있는 CodeSmith를 기반으로 하는 PLINQO 코드 생성 템플릿 세트를 확인할 수도 있습니다 .

  • 하나의 거대한 파일 대신 클래스 당 하나의 파일 생성
  • 필요에 따라 모델을 업데이트하십시오
  • 더 많은 기능

PLINQO 사이트 ( http://www.plinqo.com)를 확인 하고 소개 비디오를보십시오.

내가 아는 두 번째 도구는 Huagati DBML / EDMX 도구 이며 DBML (Linq-to-SQL) 및 EDMX (Entity Framework) 매핑 파일 등을 업데이트 할 수 있습니다 (이름 지정 규칙 등).

마크


단지 CodeSmith에서 찢어 데 / PLINQO 난 강력하게 조언 에 대해 이 방법을 복용. 이 답변은 4 세 이상입니다.
Yuck

@ Yuck : 현재 Linq-to-SQL을 전혀 사용하지 말 것을 강력히 권합니다. 대신 Entity Framework를 사용하는 것이 훨씬 좋습니다.
marc_s

그렇습니다. 응용 프로그램이 PLINQO 대신 일반 DBML과 함께 작동하는지 확인한 후 EF로 이동하는 것은 이전 응용 프로그램을 제거하는 다음 단계였습니다.
Yuck

4

모든 .DBML 파일의 각 테이블에 대한 information_schema 모델을 동적으로 쿼리 한 다음 .DBML 파일의 일부를 데이터베이스의 새로운 스키마 정보로 덮어 쓰는 사용자 지정 작성 T4 템플릿을 사용합니다. 나는 높게이와 같은 솔루션을 구현하는 것이 좋습니다. 시간을 절약하고 테이블을 모델에 삭제하고 다시 추가하는 것과는 달리 연결을 유지할 수 있습니다. 이 솔루션을 사용하면 스키마가 변경 될 때 컴파일 타임 오류가 발생합니다. diffing이 정말 편리하기 때문에 버전 제어 시스템을 사용하고 있는지 확인하고 싶습니다. 이것은 DB 스키마 우선 접근 방식으로 개발하는 경우 잘 작동하는 훌륭한 솔루션입니다. 물론, 회사 코드를 공유 할 수 없으므로 직접 작성해야합니다. 그러나 Linq-to-XML을 알고이 를 통해 학교 갈이 프로젝트 에서 당신이 원하는 곳으로 갈 수 있습니다.


2

dbml을 업데이트하면 생성 된 코드도 업데이트되므로 VS2008에 내장 된 비주얼 디자이너를 사용하는 것이 좋습니다. 비주얼 디자이너 외부의 dbml을 수정하면 기본 코드가 동기화되지 않습니다.


4
그래,하지만 VS2008에서 비주얼 디자이너가 기본 데이터베이스에 변화를 감지하고 응답 할 수 없습니다 :-( 짧은을 삭제하고 재 - 추가하는, 모델 :-( 업데이트에 대한 지원이 없다
marc_s을

사실이지만 질문은 매우 모호하며 데이터베이스가 변경 될 때 모델을 업데이트하는 방법에 대해서는 구체적으로 언급하지 않았습니다.
Jason Miesionczek

2

테이블을 업데이트 한 다음 DBML을 업데이트하는 데 미묘한 차이가 있습니다. 기존 테이블을 변경 한 경우 외래 키 관계가 항상 즉시 적용되는 것은 아닙니다. 해결 방법은 프로젝트를 빌드 한 다음 테이블을 다시 추가하는 것입니다. 나는 이것을 MS 에보 고했으며 VS2010에 대해 수정되었다.

DBML 디스플레이에 새로운 외래 키 제약 조건이 표시되지 않습니다


주요 답변에 제공된 지침은 명확하지 않습니다. 테이블을 업데이트하려면

  1. dbml 디자인 화면을 엽니 다
  2. 오른쪽-> 클릭-> 모두 선택 또는 CTRLa
  3. CTRLx (절단)
  4. CTRLv (풀)
  5. 솔루션을 저장하고 다시 빌드하십시오.

관련 connect.microsoft.com/VisualStudio/feedback/details/414601/… 이 수정되지 않았기 때문에 수정되었다고 생각하지 않습니다
Michael Freidgeim

잘라 붙여 넣기 전이나 후에 변경합니까?
Kolob Canyon

10 년이 지났지 만 ... 이전은 믿습니다 ... 변경을하고 # 2로 가십시오.
ΩmegaMan

1

저장 프로 시저 업데이트의 경우 .dbml 파일에서 삭제 한 후 다시 삽입해야합니다. 그러나 저장 프로 시저에 두 개의 경로가있는 경우 (예 : 무언가; 일부 열 표시; 다른 일부 열 표시) 두 경로에 동일한 열 별칭이 있는지 확인하십시오 !!! 그렇지 않으면 첫 번째 경로 열만 존재합니다.


0

다음은 데이터베이스 테이블 중 하나에 추가 한 새 열을 포함하도록 LINQ to SQL dbml 및 관련 파일을 업데이트하기 위해 작동하는 완벽한 단계별 방법입니다.

위의 다른 제안에서 제안한대로 디자인 화면을 변경해야합니다. 그러나 몇 가지 추가 단계를 수행해야합니다. 다음은 완전한 단계입니다.

1. Drag your updated table from Server Explorer onto the design surface

2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)

3. Delete the "new" table that you just dragged over

4. Click and highlight the stored procedure, then delete it

5. Drag the new stored procedure and drop into place.

6. Delete the .designer.vb file in the code-behind of the .dbml 
   (if you do not delete this, your code-behind containing the schema will
    not update even if you rebuild and the new table field will not be included)

7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.