Frage

Ohne in zu gehen, ob dies eine gute oder schlechte Idee:

Ist es möglich, ein LINQ to SQL-Domäne-Objekt in der ASP.NET-Session zu speichern, wenn die Sitzung out-of-process

[EDIT] Ich bin derzeit immer den folgenden Fehler und stellte diese Frage, weil ich die LINQ-to-SQL-Objekte vermuten:

Nicht imstande, den Sitzungsstatus zu serialisieren. In ‚State‘ und ‚SQL Server‘ -Modus, ASP.NET wird die Sitzungsstatusobjekte und als Folge nicht serialisierbaren Objekte oder MarshalByRef Objekte sind nicht gestattet serialisiert. Die gleiche Einschränkung gilt, wenn ähnliche Serialisierung durch den benutzerdefinierten Sitzungszustandsspeicher in ‚Custom‘ -Modus durchgeführt wird. [/ EDIT]

z.

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

Dabei gilt:

  • Zoo, Löwe, Tiger, alle Elefanten kommen aus einem ZooDataContext

und die web.config-Datei enthält

<sessionState
       mode="StateServer"
       stateConnectionString="tcpip=127.0.0.1:42424"
       stateNetworkTimeout="10"
       sqlConnectionString="SqlStateConnectionString"
       sqlCommandTimeout="30"
       timeout="20"
       regenerateExpiredSessionId="true"/>
War es hilfreich?

Lösung

serialisiert sie DataContractSerializer verwenden, bevor in der Sitzung oder irgendetwas anderes zu speichern, die serialisiert werden möchten ... Vor kurzem hier diskutiert:

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

Andere Tipps

das binäre Formatierungsprogramm zu verwenden (wie Session verwenden glaube ich), Sie würden, um Ihren Code selbst aus dem DBML erzeugt müssen (ich weiß, dass derzeit mit einer Linq2Sql T4-Vorlage).

Die folgende Notwendigkeit Zeichen als [NonSerialized] sein:

  • EntityRef
  • EntitySet
  • Alle Veranstaltungen (Sie müssen über den Tellerrand hinaus denken, dies zu tun, Übung für die Leser)

Auch muss die Konstruktor Logik OnCreated bewegt werden. Sie müssen auch sicherstellen, dass OnCreated aufgerufen wird, wenn Deserialisieren so das Objekt wieder nützlich sein kann. Das wird mit dem Attribut [OnDeserializing] getan.

Ich würde glauben, dass Sie Ihre Objekte als serializable markieren müssen. Ich bin mir nicht sicher, ob es Möglichkeit, dies für alle generierten Objekte zu tun ist, aber für diejenigen, die Sie in der Sitzung setzen, könnten Sie eine partielle Klasse (zum Beispiel von Lion) erstellen und geben ihm das Attribut Serializable.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top