2011-01-27 4 views
0

활성 레코드를 즉시 실행할 수있었습니다. 시작하기위한 지침은 훌륭했으며 시간이 들지 않아서 기존 데이터베이스에서 위젯을 만들고 읽을 수있는 웹 서비스를 구축했습니다. 그것은 굉장했다. 그것이 업데이 트에 왔을 때, 사태가 무너졌습니다. 클라이언트의 객체를 편집하여 서비스로 다시 보내 겠지만 서비스가 저장하면 새로운 객체가 만들어집니다. 나는 이것이 db를 다시 질의하고 클라이언트로부터받은 서비스에 할당 된 값을 할당 할 필요가 있다고 생각했다. 그러나 나의 상사는 그것이 hacky라고 말했고 pocos를 사용할 수 있기 때문에 저장소 패턴이 더 좋을 것이라고 말했다. 불행하게도 그것은 내가 얻은 지침의 범위입니다. 그래서 여기에 내 질문이있다. 3 층 앱용 Subsonic Repository 시작하기

  1. 은 T4 템플릿 활성 레코드에 대한 유일하게 좋은 또는 그들도 당신 에 대한 간단한 저장소를 을 구축 할 것입니다. 예를 들어, 도 내 pocos를 일으킬 것인가 아니면 그들입니까? 모두 '자신 만의 역할'입니까?

  2. 아음속 3 계층 해결책의 실례를 본 사람이 있습니까? 나는 그들에 대해 읽었지만 주위에 어떤 샘플이 있습니까 주위에 떠 다니고 있습니까?

활성 레코드 샘플/스크린 캐스트는 처음 시작한 시점부터 시작하기 때문에 따라하기 쉽습니다. 간단한 리포지토리는 마이그레이션 및 기타 고급 기능에 더 중점을 두는 것처럼 보였습니다.이 항목은 새로운 것이므로 점을 연결하기에 충분하지 않습니다.

어. 마감일이되어 뭔가를 배우고 이번 주말까지 운영되도록하는 것과 같은 것은 없습니다. 내가 읽었어야하는 매뉴얼에 대한 링크가있는 rtfm 인 경우에도 모든 조언을 환영 할 것입니다. 사전

답변

0

에서

덕분에 당신은 당신이 linq templates을 사용하거나 T4 템플릿을 필요로하지 않는 단순한 저장소를 사용할 수 있습니다 저장소 패턴을 사용합니다.

간단한 저장소를 사용하면 직접 pocos를 만들 수 있습니다. 음속 만들거나 당신이 선택하는 경우에 당신을위한 데이터베이스 스키마를 업데이트 할 수 있습니다

var repository=new SimpleRepository(SimpleRepositoryOptions.RunMigrations); 

을하지만, 당신이 저를 요구하는 경우에 나는 SimpleRepositoryOptions.None를 선택 자신에 의해 데이터베이스를 업데이트한다.

어쨌든 ActiveRecord 템플릿의 초기 문제는 쉽게 해결할 수 있습니다. ActiveRecord 객체가 클라이언트 측에서 직렬화되고 서버에서 직렬화 될 것을 제안합니다.

void Init(){ 
     TestMode=this._db.DataProvider.ConnectionString.Equals("test", StringComparison.InvariantCultureIgnoreCase); 
     _dirtyColumns=new List<IColumn>(); 
     if(TestMode){ 
      <#=tbl.ClassName#>.SetTestRepo(); 
      _repo=_testRepo; 
     }else{ 
      _repo = new SubSonicRepository<<#=tbl.ClassName#>>(_db); 
     } 
     tbl=_repo.GetTable(); 
     SetIsNew(true); 
     OnCreated();  

    } 

당신이 볼 수 있듯이, 내부 저장소가 생성되고 SetIsNew(true) 실행 :

액티브 개체의 기본 생성자는 다음과 같습니다 초기화 함수를 호출합니다. 개체를 deserialize 된 값으로 채우고 myitem.SetIsNew(false)을 호출하면됩니다. 아음속에 저장 중에 업데이트 쿼리를 수행하는 것으로 충분하다고 생각합니다.