문제

이것이 좋은 것인지 나쁜 생각인지 여부에 들어 가지 않고 :

세션이있을 때 ASP.NET 세션에 LINQ-to-SQL 도메인 객체를 저장할 수 있습니까? 프로세스 외?

편집] 현재 다음 오류가 발생하고 있으며 LINQ-to-SQL 객체를 의심하기 때문에이 질문을했습니다.

세션 상태를 직렬화 할 수 없습니다. 'Stateserver'및 'sqlserver'모드에서 ASP.NET은 세션 상태 객체를 직렬화하므로 결과적으로 소개 불가능한 객체 또는 MarshalByRef 객체는 허용되지 않습니다. '사용자 정의'모드의 사용자 정의 세션 상태 저장소에서 유사한 직렬화를 수행하는 경우 동일한 제한이 적용됩니다. [/편집하다

예를 들어

Session["Zoo"] = new Zoo() { 
                         new Lion(),
                         new Tiger(), 
                         new Elephant()
                  }

어디:

  • 동물원, 사자, 호랑이, 코끼리는 모두 Zoodatacontext에서 나옵니다.

Web.config 파일에는 포함되어 있습니다

<sessionState
       mode="StateServer"
       stateConnectionString="tcpip=127.0.0.1:42424"
       stateNetworkTimeout="10"
       sqlConnectionString="SqlStateConnectionString"
       sqlCommandTimeout="30"
       timeout="20"
       regenerateExpiredSessionId="true"/>
도움이 되었습니까?

해결책

세션에 저장하기 전에 DataContractSerializer를 사용하여 직렬화하거나 직렬화하고자하는 다른 것을 일련 당신 ... ... 최근에 여기에서 논의했습니다:

http://social.msdn.microsoft.com/forums/en-us/linqtosql/thread/81c84ff4-059b-474f-9c69-b8c59027fd48

다른 팁

바이너리 포맷터를 사용하려면 (SessionState 사용과 같은) DBML에서 직접 코드를 생성해야합니다 (현재 LINQ2SQL T4 템플릿이 포함되어 있음).

다음은 다음과 같이 표시해야합니다 [NonSerialized]:

  • EntityRef
  • EntitySet
  • 모든 이벤트 (이를 위해 상자 밖에서 생각해야합니다. 독자를위한 운동).

또한 생성자 논리를 이동해야합니다 OnCreated. 또한 확인해야합니다 OnCreated 객체가 다시 유용 할 수 있도록 사제화 할 때 호출됩니다. The To With [OnDeserializing] 기인하다.

나는 당신이 당신의 객체를 직렬화 가능한 것으로 표시해야한다고 생각합니다. 생성 된 모든 개체에 대해이 작업을 수행 할 수있는 방법이 있는지 확실하지 않지만 세션에 참여하는 개체의 경우 부분 클래스 (예 : 사자)를 만들고 직렬화 가능한 속성을 줄 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top