EF Code First CTP 5 を使用してバイナリ (ファイル) データを保存および取得する簡単な方法があるかどうかを調べようとしています。FILESTREAM タイプを使用することを本当に望んでいますが、それを機能させる方法を本当に探しています。
3 に答える
ProductImage
遅延読み込みを管理し、テーブルを正規化するために、1 対 1 の関連付けのような別のクラスを常に作成します。
public class ProductImage
{
public int ProductId { get; private set; }
public byte[] Image { get; set; }
}
Ladislavが述べたように、プロパティをbyte []として宣言するだけです。
public class Product
{
public int Id { get; private set; }
public string Name { get; set; }
public byte[] ProductImage { get; set; }
}
それはほとんどそれです。プロパティをマップしない場合、規則は . にマップされますvarbinary(max)
。データベースに既に画像列がある場合は[Column(TypeName = "image")]
、ProductImage プロパティを追加するか、コード マッピングを使用する場合は、コンテキスト クラスの OnModelCreating オーバーライドにこれを追加します。
modelBuilder.Entity<Product>().Property(p => p.ProductImage).HasColumnType("image");
私が抱えている問題は、製品をフェッチするたびにバイナリデータをロードする必要がないため、プロパティを遅延させる方法を見つけられなかったことです。正しく思い出せたかどうかはわかりませんが、NHibernate はすぐに使用できます。
FILESTREAM
EFでは SQL を使用できません。EF はさまざまなデータベース サーバー上で動作するはずですが、ファイル ストリーム機能は SQL 2008 以降に固有の機能です。varbinary(max)
データベーステーブルで使用し、マップされたクラスでバイト配列を使用するという古い方法を試すことができます。
編集:
少し明確化 -FILESTREAM
データベースで使用できますが、EF はストリーミングを利用しません。標準としてロードされますvarbinary(max)
。