3

イメージをバイト配列として SQL データベースに保存している状況です。私はEFを使用しているため、モデルにバイト配列の自動プロパティがあり、最初にコードを介してデータベースにコミットされます。

イメージである読み取り専用プロパティをモデルに配置し、get アクセサーが呼び出されたときにバイト配列をイメージに変換したいと考えています。2 つの質問:

  1. どのような種類の画像を使用すればよいですか? System.Drawing 画像にするか、新しい BitmapImage にするか?
  2. これにより、コード ファーストと EF に関して問題が発生しますか?

必要に応じてコードを投稿できますが、それが必要だとは思わなかったので、誰かが私のコードを見たい場合は、コメントを残してください.

4

1 に答える 1

2

1) どのような画像を使用すればよいですか? System.Drawing 画像にするか、新しい BitmapImage にするか?

そのなかで何も。バイト配列 ( byte[]) を使用する必要があります。

2) これにより、コード ファーストと EF に関して問題が発生しますか?

私はそうは思わない。私は EF の専門家ではありませんが、byte[]プロパティをvarbinary(max)データベース内の対応する列にマップできるはずだと思います。

画像を表示し、ビュー モデルにプロパティを設定することに関する元の質問に戻ります。data uri schemeそれを行っても、すべてのブラウザーで広くサポートされていない を使用しない限り、このバイト配列プロパティをビュー内の画像として表示することはできません。そのルートに進むことにした場合、これがどのように見えるかを次に示します。

@model MyViewModel
...
<img src="data:image/png;base64,@Html.Raw(Convert.ToBase64String(Model.Image))" alt="some image">

しかし、代替手段としてすべてのブラウザーで機能するソリューションを探している場合は、データベースから画像をバイト配列として取得し、それを応答にストリーミングするコントローラー アクションを設計できます。<img>次に、ビューからタグ内でこのアクションを参照できます。

例を見てみましょう:

public ActionResult Image(int id)
{
    byte[] imageData = ... go query your database to retrieve the corresponding
                           image record using the id
    return File(imageData, "image/png");
}

次に、メイン ビュー内で、<img>このコントローラー アクションにタグを付けるだけです。

@model MyViewModel
...
<img src="@Url.Action("Image", "SomeController", new { id = Model.Id })">
于 2013-02-03T17:53:10.550 に答える