【问题标题】:Automatic serialization with Linq to Sql使用 Linq to Sql 自动序列化
【发布时间】:2012-10-31 15:43:09
【问题描述】:

有没有办法在表格中存储数据:

SettingsModel 列内,在Linq-to-Sql 中定义如下:

还有DataContext选项转为:

类 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 指向实际进行序列化(反之亦然)。

【问题讨论】:

    标签: c# linq-to-sql serialization xml-serialization


    【解决方案1】:

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

    如果一个类实现了 Parse()ToString(),您可以将对象映射到任何 SQL 文本类型(CHAR、NCHAR、VARCHAR、NVARCHAR、TEXT、新文本,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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      相关资源
      最近更新 更多