2012-11-12 22 views
7

c'è un modo per memorizzare i dati nel tipo tavola di questo:serializzazione automatica con LINQ to SQL

http://pasteboard.s3.amazonaws.com/images/LDTcQpG.png

All'interno SettingsModel colonna, che è definito in Linq-to-Sql come questo:

http://pasteboard.s3.amazonaws.com/images/LDXSPiM.png

E anche con l'opzione DataContext volta a:

http://pasteboard.s3.amazonaws.com/images/LE1ddhn.png

Con il SettingsModel classe definita in questo modo:

namespace ElQueue.DataClasses 
{ 
    [DataContract] 
    public sealed class SettingsModel 
    { 
     [DataMember(IsRequired = true)] 
     public int[] VideoMediaData { get; set; } 
    } 
} 

questo modo? ...

using (SomeDataContext dataContext = new SomeDataContext()) 
{ 
    SettingsModel m = new SettingsModel(); 
    m.VideoMediaData = new int[] { 1, 2, 3 }; 
    dataContext.MainTableSettings.InsertOnSubmit(new MainTableSetting() { SettingsModel = m }); 
    dataContext.SubmitChanges(); 
} 

using (SomeDataContext dataContext = new SomeDataContext()) 
{ 
    var r = dataContext.MainTableSettings.Single(); 
} 

Vedete, il codice di cui sopra non funziona correttamente, si sta gettando eccezione che dice che non può convertire la stringa di MainTableSetting il che significa che o non è possibile salvare tutti i dati serializzati, o che più non può deserializzare indietro.

Ho bisogno di alcuni consigli su come indirizzare questo Linq-to-Sql per fare effettivamente la serializzazione (e viceversa) quando accedo al database.

risposta

4

Anche se è possibile mappare XElement e XDocument a SQL Server come indicato nel comportamento Matrix Tipo Mapping tempo di esecuzione, il metodo System.Data.Linq.DataContext.CreateDatabase ha alcun tipo SQL Server predefinito mappatura per questi tipi .

Se una classe implementa Parse() e ToString(), è possibile mappare l'oggetto a qualsiasi tipo di testo SQL (CHAR, NCHAR, VARCHAR, NVARCHAR, text, ntext, XML). L'oggetto viene archiviato nel database inviando il valore restituito da ToString() alla colonna del database mappato. L'oggetto viene ricostruito invocando Parse() sulla stringa restituita dal database.

http://msdn.microsoft.com/en-us/library/bb386947.aspx#TextMapping

public sealed class SettingsModel 
{ 
    // ... 

    public static SettingsModel Parse(string source) 
    { 
     SettingsModel res; 

     // Deserialise the object 

     return res; 
    } 
}