Es gibt etwas, das ich nicht ganz verstehe, wenn Linq zu SQL- und XML-Serialisierung unter einige meiner Objekteigenschaften verwendet.C# - Verwenden von Linq zu SQL mit XML-Serialisierung
Regelmäßig würde ich meine Tabellen erstellen und dann Linq zu SQL verwenden, um alle meine Klassen zu generieren. Aber jetzt, da ich einige meiner Klasseneigenschaften serialisiere, wenn ich die Datenbanktabellen erstelle, definiere ich diese Eigenschaften als varchar (für die XML-Zeichenkette) anstelle des tatsächlichen Typs, der sie sind. Daher werden die automatisch generierten Klassen mit string typed-Eigenschaften anstelle der tatsächlichen Klassen erstellt.
Gibt es eine Möglichkeit, Linq zu sagen, meine de/serialization automatisch anzuwenden, wenn Objekte aus der Datenbank eingefügt/abgerufen werden? Und behalte den ursprünglichen Typ für meine serialisierten Eigenschaften in den von Linq automatisch generierten Klassen?
A-Klasse zum Beispiel
Beachten Sie, dass classBProp vom Typ ClassB ist.
class ClassA
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private ClassB classBProp; // <-- This is something i'm serializing
public ClassB ClassBProp
{
get { return classBProp; }
set { classBProp = value; }
}
public ClassA()
{
classBProp = new ClassB();
}
}
Die Tabelle für die Klasse
Hier ClassBProp ist vom Typ varchar. Also generiert Linq to SQL die Klasse mit einer String-Eigenschaft.
CREATE TABLE [dbo].[ClassA] (
[Id] INT NOT NULL,
[Name] VARCHAR (50) NULL,
[ClassBProp] VARCHAR (MAX) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Ok danke! Ich dachte, es gäbe einen angemesseneren Weg, dies zu tun. Aber wenn es so gemacht wird, geht es mir gut. Nur um zu klären – moonlander
Entschuldigung, versehentlich gepostet. Nur um zu verdeutlichen, beim Speichern ich nur eine ClassC-Instanz erstellen und dann DataContext.ClassAs.InsertOnSubmit (classCInstance). – moonlander
Und zum Lesen muss ich eine ganz neue Sammlung von deserialisierten Objekten erstellen, um die serialisierten Objekte zu spiegeln. Oder wenden Sie eine Deserialize-Methode für jedes Objekt an, wenn ich darauf zugreifen möchte. Ich habe es richtig? – moonlander