2009-06-03 2 views
0

나는 VS ORD에 의해 생성 된 Linq to SQL 모델을 가지고 있지만 몇 가지 문제를 해결하기 위해 변경하고 싶습니다. designer.cs 생성 된 코드를 변경할 수는 있지만 모델 내의 테이블을 다시 작성해야한다면이를 삭제하고 다시 ORD로 드래그하십시오. 그러나 이것은 나의 모든 주문형을 잃어 버린다. 다른 방법이 있습니까?테이블을 사용자 정의 할 때 변경하면 Linq 다시 SQL 코드

나는 sqlMetal.exe에 대한 참조를 보았지만이 문제를 해결하는 데 어떻게 사용해야하는지 잘 모릅니다.

  1. 을 나는이 기본값으로 Guid 년대를 사용하고 DB를 원하는하고, 따라서 나는 ID에 속성 [Column(IsDbGenerated= true)]을 추가 할 기본 linqtosl 동작을 변경하려면, 다음과 같이

    는 정보 내 사용자 정의한 내용은 속성.

  2. MVC의 기본 모델 바인딩이 컬렉션 (EntitySet<T>)에서 작동하지 않습니다. 이 문제를 해결하려면이 컬렉션에 대한 세터를 약간 변경해야합니다.

이러한 변경 사항은 특히 크지 않지만 시간이 지남에 따라 데이터베이스가 크게 변경 될 수 있으므로 매번 사용자 지정을 수행해야한다는 것을 기억해야합니다.

답변

0

나는이 같은 질문을 가지고 여기에 나와있는 두 가지 요점을 모두 해결하는 대답을보기를 희망했다. (일부 항목에서 OnCreated()를 사용하는 것에 대한 생각이 현재 내가하고있는 것보다 더 좋을지라도 귀하의 항목 # 2에 대한 다른 해결책을 찾았습니다.)

나는 최근에 기사 이 목표를 달성하기위한 적용 가능한 솔루션 일 수 있습니다. 이 기사에서는 작성자 (1)가 SQLMetal을 사용하여 dbml 파일을 생성하는 방법과 (2)이 dbml 파일을 구문 분석하고 수정 한 사용자 정의 프로세스를 실행 한 다음 (3) SQLMetal을 다시 사용하는 방법을 설명합니다. dbml 파일, 코드를 생성합니다. 소규모 프로젝트/스키마의 경우 많은 작업이 될 수 있지만 이것이 대형 프로젝트에서 어떻게 손쉬운 해결 방법이 될 수 있는지 알 수 있습니다. http://www.onedotnetway.com/enum-support-with-linq-to-sql-and-sqlmetal/

행운을 빕니다를 :

여기 링크입니다! -Mike

+0

감사합니다. Mike, 유용하게 보이지만 접근 방법을 시도하기 전에 변경 사항이 적용될 때까지 기다릴 것이라고 생각합니다. 그 동안에는 노트북과 수동 업데이트가 필요하다고 생각합니다. – Richbits

1

이것은 what "partial" classes are all about입니다. L2SQL은 엔티티 클래스를 "부분"으로 생성하므로 yur 엔티티 모델을 다시 작성하더라도 디자이너가 생성 한 코드를 편집 할 필요가 없습니다.

+0

감사합니다.이 특별한 경우 엔 OnCreated() 메서드를 사용하여 EntitySet 문제를 해결할 수 있지만 해당 속성을 설정하는 방법은 알 수 있습니다. IsDbGenerated? – Richbits

0

이전에이 경로를 따라 왔지만 sqlmetal.exe/dbml 경로에서 벗어나 TIN 용 LINQ to SQL 템플릿과 같은 사용자 지정 클래스 생성기에 참여하는 것이 유일한 방법입니다. 당신이 당신의 클래스 생성기는 다른 소스에서 사용자 정의 변경 정보를 가져가 필요하기 때문에

http://l2st4.codeplex.com/

이 같은 것을 사용해야하는 이유입니다. 결국 Dbml이 전통적으로 사용하는 생성 된 XML에 사용자 정의를 넣었습니다. 그런 다음 t4 템플릿을 수정하여 필자가 필요로하는 사용자 정의 클래스를 뱉어 냈습니다.

경고 : 이것은 실현하기 위해 악몽 인이었고 사용자 정의 변경 사항 메모장 파일을 위해 폐기되었습니다. 우리는 필요할 때마다 그들을 태워 버릴뿐입니다. IMO 이것은 Linq2SQL의 가장 약한 점 중 하나이며 향후 프로젝트에서 다른 ORM을 탐구 한 큰 이유 중 하나입니다.

+0

고마워, 나는 노트북을 사러 갈거야 .-) – Richbits

관련 문제