質問

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

だから今夜、私はSubSonicに飛び込むことにしました。ここにはたくさんの質問があり、ロブや他の多くの人からの素晴らしい反応があります。 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(または列挙型PostType)およびImage(byte []配列)の2つの列が欠落しています。

今、私は誰かがInt32 PostTypeIDを使用して列挙の問題を回避することについて投稿した回答のハックを見つけました。ロブに来て、SubSonicはINTに列挙型をサポートし、それらから戻ることができるはずです。 ;)これが私が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を作成しません。

考え?事前に感謝します。

役に立ちましたか?

解決

バイナリスニファーがありました考えていました-トリックを実行しません。私はこれを追加する必要があります-私たちが持っているものをフォークしてこれを追加してもかまわないならもっと良いです-私はそれをあなたに愛しています。拡張機能を試してみてください-ToDataTable()を変更したい(と思う)...

チャンスがない場合-次にSimpleRepoを改訂するときに追加します...

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top