オブジェクトをDBへシリアライズ/デシリアライズする

過去のブログのアーカイブ
この記事は前身のブログのアーカイブを引き継いだものです. 画像が正しく表示できないなど,コンテンツの表示に問題がある恐れがあります.

データベースはあると便利なんですが、扱うのがとても面倒くさい。というわけで簡単に扱えるシリアライズクラスを作ってみた。
データベースの種類はほとんど選びません。SQLiteのみ動作確認済み
タイプについてはString/Int32/Float/Double/DateTimeのみ対応。拡張で使えるように…というのは配慮してないです。
こちらのクラスと組み合わせて使っています。ちょこっと改造すれば使わなくても実現できるかも

ソースコード

長くなるので記事には載せていません。ダウンロードの方からどうぞ

サンプルソース

クラスを用意する

まずはシリアライズするためのベースとなるクラスを作成します。
DBSerialize.DBSerializeクラスを、ジェネリック型に自クラスを指定して実装します。そうすることでシリアライズに必要なメソッドが自動的に追加されます。

public class ExampleClass : DBSerialize.DBSerialize<Station>
{
    [PrimaryKey, Autoincrement, DataMember]
    public int ID { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Yomi { get; set; }
    protected override string TableName
    {
        get { return "Station"; }
     }
}

DataMemberAttributeを指定したメンバーのみシリアライズの対象になります。また、PrimaryKeyやAutoincrement等の指定もできます。
私の方では確認してないですがDefaultの設定も可能、ただし属性で指定した値はエスケープされないので注意してください。

シリアライズする

// データベースを開く
SQLiteConnection con = new SQLiteConnection();
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\test.db";
con.ConnectionString = string.Format("Data source={0};", path);
con.Open();
// クラスを初期化/値を入れる
ExampleClass value = new ExampleClass()
    {
        Name = "テスト",
        Yomi = "てすと",
    };
// テーブルが作られていない場合、作成する
value.Build(con);
// シリアライズ/書き込みする
value.Save(con);

Buildメソッドでテーブルの作成、Sabeメソッドで追加します。PrimaryKeyに指定された値が同じ行が既に追加する場合は書き換えます。
もし、PrimaryKeyの内容に関係なく追加したい場合はAddメソッドの方を使用してください。

ダウンロード

[wpdm_file id=2 title=”true” desc=”true” ]

追記

専用の公開ページを用意しました。
http://yryr.me/works/library/db-serializer
引き続きの更新はこちらのタグで行っています。
Tag: DB Serializer