2010-01-07 11 views
1

SharpArchitecture를 시험해보고 FluentNHibernate에서 내 MVC WebSite 용 데이터베이스 스키마를 생성하려고합니다.SharpArchitecture - FluentNHibernate 스키마 생성?

나는이 작업을 수행 할 수있는 곳을 잃어 버렸습니다. "Application_beginrequest"의 NHibernateInitializer.Instance().InitializeNHibernateOnce(InitializeNHibernateSession); 바로 뒤에 global.asax.cs 파일의 SchemaUpdate를 추가하면됩니다. (그 호출 전에 배치하면 SharpArch는 예외를 throw합니다.)

이것은 올바르게 보이지 않고 나쁘다. 그것은 내 DB (MSSQL2005) 자동 스키마 생성을 허용 샤프 아키텍처에서 뭔가를 빠뜨린 것 같은 느낌. 아니면 내가 아닌가요? 그렇지 않다면 유창한 nhibernate 및 Sharp Architecture를 사용하여 스키마를 생성하는 모범 사례를 작성하십시오.

미리 감사드립니다.

편집 : 나는 SharpArch의 Northwind 샘플 프로젝트를보고 있지만 FNHb가 대신 스키마를 생성하도록 추가 할 수 있습니다.

답변

3

Application_BeginRequest에서 원하지 않습니다.

DDL을 자동 생성하려면 TDD 클래스에서 수행해야합니다. 개발 데이터베이스 용 DDL을 생성해야 할 때 수동으로 호출 할 수있는 특수 클래스를 만듭니다. 같은

뭔가 :

private static void CreateDatabaseFromFluentNHibernateMappings() 
{ 
    var mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies(); 
    SchemaExport schema = new SchemaExport(NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies, NHIBERNATE_CFG_XML)); 
    schema.Execute(true, true, false); 
} 

이 생성합니다 (NHIBERNATE_CFG_XML에서) 당신이 당신의 NHibernate에 설정 파일에 지정된 데이터베이스에 매핑을 기반으로 DDL을 실행합니다. 데이터베이스는 비어 있더라도 이미 존재해야합니다.

또한 등

private static void UpdateExistingDatabaseFromFluentNHibernateMappings() 
{ 
    var mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies(); 
    SchemaUpdate schema = new SchemaUpdate(NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies, NHIBERNATE_CFG_XML)); 
    schema.Execute(true, true); 
} 

이 기존 데이터베이스를 업데이트 할 경우를 대비해 새로운 엔티티, 속성을 추가로 개발할 때 개발 데이터베이스의 스키마를 업데이트 할 수 있습니다 클래스에서 다른 방법을 만들 수 있습니다

기존 데이터베이스를 손상시키지 않으면 서 FNH에서 변경 한 내용을 확인하십시오. 특히 데이터베이스에 이미 테스트 데이터가있는 경우 매우 유용합니다.

마지막으로 NDbUnit을 사용하여 프로젝트 및 SCM에서 XML로 정의 된 테스트 데이터를 기반으로 데이터베이스를 미리로드 할 수 있습니다. 동일한 데이터베이스에서 작업하는 팀이 있고 데이터로 미리로드하려는 경우 모든 사람이 동일한 빈 슬레이트로 시작합니다.

사용 NDbUnit : 당신이 NDbUnit를 사용하는

private static void LoadTheTestDataintoDb() 
{ 
    const string connectionstring = // your connection string to your db 
    NDbUnit.Core.INDbUnitTest sqlDb = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connectionstring); 
    sqlDb.ReadXmlSchema(/* your XML schema file defining your database (XSD) */); 
    sqlDb.ReadXml(/* Your XML file that has your test data in it (XML) */); 
    // Delete all from existing db and then load test data allowing for identity inserts 
    sqlDb.PerformDbOperation(NDbUnit.Core.DbOperationFlag.CleanInsertIdentity); 
} 

이 필요합니다. Stephen Bohlen에게 감사드립니다!

이 정보가 도움이되기를 바랍니다. 나는이 편지를 빨리 썼다. 그래서 내가 너를 혼란스럽게한다면 알려줘.

+0

감사합니다. 토드! 필자는 스키마를 생성하기 위해 별도의 콘솔 응용 프로그램을 작성하는 것에 대해 생각하기 시작했지만, 나머지 테스트에서는이를 수행하는 것이 좋습니다. 모든 훌륭한 코드 예제를 보내 주셔서 감사합니다. 많은 도움이 될 것입니다. –