2010-02-26 2 views
2

저는 LINQ to SQL을 처음 사용했지만 과거에 많은 데이터베이스 개발을 수행했습니다.DataContext.CreateDatabase()를 사용할 때 데이터베이스 인덱스 생성을 제어하는 ​​방법은 무엇입니까?

소프트웨어 난 그냥 사용하는 작업을 시작 : 처음 실행이되면

// MyDataContext is a sub class of DataContext, that is generated with SqlMetal 
MyDataContext db = new MyDataContext (connectionString); 
db.CreateDatabase(); 

데이터베이스를 만들 수 있습니다.

테이블에 인덱스를 추가해야합니다 ....
원하는 인덱스를 어떻게 알 수 있습니까?

그렇지 않으면 어떻게 제어합니까?

(I는 SQL 스크립트를 사용할 수 있지만 DB를 이상적인를 좋아한다. CreateDatabase 항상 데이터 액세스 코드와 일치하는 데이터베이스를 작성합니다) 더 나은 또는 더 나쁜 소프트웨어의 경우 (

은 전체 액세스 권한을 가지고 데이터베이스 서버와 우리의 소프트웨어는 종종 모델의 저장 결과를 즉시 데이터베이스를 만들고 실행하는 등, 그래서 나는 유일한 사람이하지 않는 것 우리가 코드에서 데이터베이스)


를 작성해서는 안 말하지 마십시오 DataContext.CreateDatabase()에서 limts를 타격하십시오. http://csainty.blogspot.com/2008/02/linq-to-sql-be-careful-of.html

답변

1

알고있는 한 DataContext.CreateDatabase 메서드는 기본 키만 만들 수 있습니다.

DBML을 직접 살펴보면 색인을 정의하는 요소가 없음을 알 수 있습니다. 그러므로 IMHO는 CreateDatabase가 그것을 수행 할 수 없다고 가정합니다.

인덱스를 "자동으로"만드는 방법은 먼저 DataContext.CreateDatabase을 호출 한 다음 DataContext.ExecuteCommand을 호출하여 방금 만든 테이블에 인덱스를 추가하는 것입니다.

+0

감사합니다. 같은 결론을 내 렸습니다. 그러나 문제는 많은 범위 쿼리가있는 DateTime 열이 있으므로 기본 키가 클러스터 된 인덱스 인 것을 원하지 않는다는 것입니다. 끝났어. –

+1

Linq에서 SQL 로의 변환은 항상 편리함을 명심해야합니다. 사용하기 쉽지만 "프로퍼러 (propper)"ORM의 완벽한 유연성을 제공하지는 않습니다. 우리는 .NET 4.0과 Entity Framework로 우리를 때리는 일을 기다려야 할 것입니다. 여기에 .NET 4.0 http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40에서 Linq에의 변화로 연결되는 링크를 제공합니다 (이 좋은 말장난). – AxelEckenberger

0

DatabaseCreated 메서드에서 SQL 명령을 실행할 수 있습니다.

관련 문제