2012-11-12 33 views
7

有什么办法将数据存储在表种这样的:使用LINQ自动序列化到SQL

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

里面SettingsModel列,这是在Linq-to-Sql定义是这样的:

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

而且还用DataContext选项转向:

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

有了这样定义的类SettingsModel:

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

这样? ...

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(); 
} 

你看,上面不工作的代码正确,则引发异常它说,它不能将字符串转换为MainTableSetting,这意味着要么不能拯救所有的序列化的数据或加无法反序列化回来了。

我需要一些建议,当我访问数据库时,如何指向这个Linq-to-Sql以实际进行序列化(反之亦然)。

回答

4

虽然如图所示的类型映射运行时行为矩阵可以映射的XElement和的XDocument到SQL Server,该System.Data.Linq.DataContext.CreateDatabase方法没有为这些类型的默认SQL Server类型映射

如果一个类实现解析()的ToString(),您可以将对象映射到任何SQL文本类型(CHAR,NCHAR,VARCHAR,NVARCHAR,TEXT,NTEXT,XML)。将对象存储在数据库中,方法是将ToString()返回的值发送到映射的数据库列。该对象通过对数据库返回的字符串调用Parse()进行重构。

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; 
    } 
}