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) を作成しません。
考え?そして、前もって感謝します。