7

このようなテーブルにデータを保存する方法はありますか?

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データベースにアクセスするときに実際にシリアル化(およびその逆)を行うためにこれをポイントする方法について、いくつかのアドバイスが必要です。

4

1 に答える 1

4

タイプマッピング実行時動作マトリックスに示されているように、XElementとXDocumentをSQL Serverにマップできますが、System.Data.Linq.DataContext.CreateDatabaseメソッドには、これらのタイプのデフォルトのSQLServerタイプマッピングがありません。

クラスがParse()および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;
    }
}
于 2012-11-16T09:08:12.677 に答える