2009-12-01 3 views
0

SubSonic 3 소스를 수정하는 데 시간을 투자하기 전에 뭔가 간단한 것이 누락되는지 확인해 보았습니다.SubSonic 3 저장소 - SQLite 인 메모리

SQLite In-Memory 데이터베이스에서 SubSonic 3 리포지토리를 마이그레이션 할 수 있습니까? DbDataProvider가 연결을 열어 두어 강제로 연결을 닫을 때 In-Memory SQLite 데이터베이스가 사라지지 않도록 할 수있는 방법을 찾지 못했습니다.

나는이 시도 된 연결 문자열을 가진 단위 테스트 ...

나는 IDataProvider의 "공유 연결"을 설정하려고했으나 연결이 계속 닫을 듯
public class SQLite_InMemory_SimpleRepositoryTests 
{ 
    public class Job 
    { 
     public Guid JobId { get; set; } 
     public string JobName { get; set; } 
    } 

    [Fact] 
    public void SQLite_InMemory_SimpleRepo_CanStayOpen() 
    { 
     IDataProvider provider = ProviderFactory.GetProvider("Data Source=:memory:;Version=3;New=True;Pooling=True;Max Pool Size=1;", "System.Data.SQLite"); 
     IRepository repository = new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations); 

     for (int i = 0; i < 10000; i++) 
     { 
      var job = new Job {JobId = Guid.NewGuid(), JobName = "Job_"+i}; 
      repository.Add(job); 
     } 
    } 
} 

.

그렇지 않은 경우, 음속 소스를 업데이트하고 변경 사항을 제출합니다.

감사합니다.

답변

2

흥미 롭 - 아니 내가 생각할 수있는 방법은 아마도 정적 IDataProvider을 생성하지만, 그렇다하더라도 우리는 당신이 만들 수 스포스 등 스칼라의

을 실행 등의 작업을 수행하기위한 연결을 닫습니다보다이 다른이 할 수 없습니다 것 그런 일은 IDataProvider를 구현 한 다음 필요에 따라 설정함으로써 모든 실행이 완료됩니다. 흠 ... 내 인생에 나쁜 디자인이 될 것 \

이 기능을 가지고 싶어요 ...

+0

안녕 롭, - 그러나 이것은 우리가 명시 적으로 호출 코드에 물건을 종료하면 저를 궁금해하고있다. 정보 주셔서 감사합니다. 나는 실행에 대한 흔적을했고, Close와 Dispose를 몇 군데서 호출했습니다. bool IsSqlLiteMemoryDb()라는 IDataProvider에 확장 메서드를 구현하여 연결 형식을 확인하고 메모리 : 연결 문자열에서 disposes/closes를 재정의했습니다. 어디 코드를 게시해야합니까? –

+0

참고로, 나는 테스트를 통과 할 수 있었지만 'hackishly'. 코드를 리팩토링하고 게시합니다. 어디 있는지 알려주세요. 감사. –

+0

나는 여기에서 추정 할 것입니까? : http://github.com/subsonic/SubSonic-3.0 – Mike