1

SubSonic のスキーマ ビルダーを使用して DB にバイナリ列を作成するにはどうすればよいですか?

そこで今夜、SubSonic に飛び込むことにしました。ここには多くの質問が寄せられており、Rob や他の多くの人から素晴らしい回答が寄せられています。SubSonic は ORM であることがわかりました。T4 テンプレートを使用すると、既存のデータベースから非常に優れた効率的なクラスを生成できます。

でも、逆に行きたい。私は非常に豊富なドメインを持っており、SubSonic と RunMigrations オプションを使用して、ドメインからアドホックにテーブルを作成したいと考えています。

すべてが非常にうまく機能します(アセンブリのリビジョン番号に基づいてコードベースに変更があるかどうかを検出し、すべてのオブジェクトの更新をDBに移行する独自のUpgrade()関数を作成しました-DBの自動アップグレードには非常に滑らかで効率的です)。

しかし、SubSonic にバイナリ列を作成させるにはどうすればよいでしょうか。意図したとおりに使用していない可能性があります (Query や SqlQuery を使用しておらず、SimpleRepository の Linq インターフェイスのみを使用しています)。以下を参照してください (一般的な「ブログ投稿」の例を使用):

[SubsonicTable]
public class Post
{
    [SubSonicPrimaryKey]
    public Int32 PostID { get; set; }

    [SubSonicStringLength(1024)]
    public String Title { get; set; }

    [SubSonicLongString]
    public String Body { get; set; }

    [SubSonicStringLength(5)]
    public String? LangaugeCode { get; set; }

    public DateTime? Published { get; set; }

    public PostType PostType { get; set; }
    public Int32 PostTypeID
    {
        get
        {
            return this.PostType.GetHashCode();
        }
        set
        {
            Enum.Parse(typeof(PostType), value.ToString());
        }
    }

    public Byte[] Image { get; set; }
}

public enum PostType
{
    NotSet = 0
    ,BlogPost
    ,Comment
    ,Trackback
    ,Pingback
}

この Post オブジェクトが SimpleRepository を介して保存またはクエリされると、PostType (または enum PostType 型) と Image (byte[] 配列型) の 2 つの列が欠落しています。

ここで、列挙型の問題を回避するために Int32 PostTypeID を使用することについて誰かが投稿した hack-of-an-answer here を見つけました。Rob に来てください。SubSonic は INT への enum 型をサポートし、そこから戻ることができるはずです。;) これが私が PostTypeID を持っている理由であり、これは適切に作成され、書き込まれます。

これは、私のために Post テーブルを作成し、最初の投稿を挿入するコマンドの例です。

Post p = new Post();
p.Title = "My Title";
p.Body = "The body of the post.";
p.PostType = PostType.BlogPost;

var repo = new SimpleRepository(SimpleRepositoryOptions.RunMigrations);
repo.Add(p);

注: RunMigrations には最初の実行時に追加の TSQL クエリが多数あるため、このコードを運用環境で使用しないでください。

上記の例から、Posts テーブルが存在しない場合は作成され、列が作成されることがわかります。

ただし、これは上記の 2 つの列 (PostType と Image) を作成しません。

考え?そして、前もって感謝します。

4

2 に答える 2

0

私は自分でバイナリ列の問題に遭遇しました。パッチ/修正があれば、喜んでテストします。

于 2009-10-24T01:20:12.857 に答える