2009-01-19 2 views
5

우리는 우리가하는 모든 종류의 회사 특정 정보를 용이하게하기 위해 작성한 엔터프라이즈 프레임 워크를 사용합니다.C#, Winforms 및 LINQ to SQL .. 데이터 센터 텍스트 수명주기?

프레임 워크 내에서 적절한 경우 사용할 LINQ to SQL ORM을 제공합니다. 이 모든 것은 Microsoft MVC 프레임 워크를 기반으로합니다. MVC 측에서는 기본 컨트롤러에 datacontext를 새로 만듭니다. 이를 통해 트랜잭션에 매우 유용한 전체 datacontext 라이프 사이클을 제공 할 수 있습니다.

우리가 수행하고자하는 한 가지 작업은 Winforms 지원을 제공하는 것입니다.

그러나 저는 Winforms와 유사한 방식으로 작동하는 방법을 찾기 위해 벽에 머리를 두드리는 중입니다.

한 페이지로드가 논리적 트랜잭션을 나타내므로 MVC 접근 방식이 매우 간단하므로 Winforms 측면에서 솔루션을 찾는 것이 어렵습니다.

누구나 비슷한 작업을했거나 권장 사항이 있습니까?

답변

2

나는 작년에 만든 몇 가지 작은 소프트웨어에 대해 그렇게했습니다.

우리는 요청/응답 모델과 유사하게 양식을로드하는 응용 프로그램 셸을 만들었습니다.

웹 및 Windows 용으로 구현 한 RenderView() 메서드를 사용하여 IRenderer 인터페이스를 만들었습니다. 그것은 내가 같은 컨트롤러와 모델을 둘 다 사용할 수있게 해준다. goodle에서 Model-View-ViewModel (MVVM)을 검색하면이 방법에 대해 뭔가를 찾을 수 있습니다.

나는 this article이 내가 무슨 말을하는지 이해하는 데 도움이 될 것이라고 생각합니다.

+0

정보를 제공해 주셔서 감사합니다. –

3

장기간 사용하는 DataContext (예 : 앱의 싱글 톤)와 수명이 짧은 DataContext 중 하나를 선택하려는 경우 두 번째를 선택합니다. 나는 각각의 "Unit Of Work"에 대해 새로운() DataContext를 작성하고 가능한 한 짧은 기간 동안 그것을 유지해야한다. 메타 데이터를 캐시하기 때문에 새 DataContext를 만드는 것이 큰 문제는 아닙니다. 오래 지속 된 DataContext를 사용하면 많은 객체를 추적하기 시작할 때 약간의 악몽이 생길 수 있습니다.

+0

+1 작업 단위가 여기 핵심 문구입니다. 데스크톱 응용 프로그램은 여전히 ​​별도의 작업 단위로 나눌 수있는 별도의 비즈니스 트랜잭션을 수행하고 있습니다.이것들은 datacontext의 생명주기를 제어해야한다. –

0

모든 것에 대해 하나의 datacontext를 갖는 문제는 열려있는 여러 편집을 할 수없고 하나만 커밋 할 수 없다는 것입니다. 많은 응용 프로그램 모델에서 이것은 비 스타터입니다. 따라서 독서를위한 싱글 톤 datacontext가 있고 각 커밋 액션마다 하나씩 생성됩니다. 업데이트 함수는 읽을 데이터 인터페이스에서 저장할 개체를 분리하고 새 커밋 데이터 인터페이스에 연결 한 다음 DC.Submit 변경을 실행합니다.

유일한 까다로운 문제는 개체가 제출시 제출되거나 제출시 삽입되어야하는지 추적 할 수있는 방법과 표준 자동 num 기본 키가 있거나 컬렉션에서 어떤 열이 삽입 대 ​​업데이트를위한 클래스를 확인하십시오. 이것은 극복하기가 아주 쉽습니다.

+0

읽기를 위해 장기 datacontext를 열어두기 위해 Downvoted. 부실 데이터를 수집하는 좋은 방법입니다. 예, 새로 고침을 할 수는 있지만 데이터 보유로 인한 성능 향상은 손실됩니다. 데이터를 가져 오거나 넣어야하는 경우에만 컨텍스트를 사용하면 레코드를 간단하게 유지할 수 있으며 개체를 삽입하거나 업데이트 할 필요가 없다는 점에 대해 걱정할 필요가 없습니다. (ID 열이있는 경우 내용을 확인할 수 있습니다. 어쨌든 작성되지 않은 경우에는 아무 것도 없습니다.) –

0

이 스레드는 약간 오래된 것이지만 unhaddins에는 Conversation-per-BusinessTransaction이 구현되어 있습니다. 현재 nhibernate에 대한 구현 만 있지만 Linq에서 SQL 또는 엔티티 프레임 워크로 구현하는 것은 간단해야합니다. list 내 대답을 확인하십시오.