2017-01-14 7 views
0

私はEF 6.1.3を使用しています。コードを使用すると、最初にエンティティのbyte[]プロパティがmaxに設定されます。 8000バイト。それを大きくする試み、つまりMAXは失敗します。最初に8000バイトを超えるコードにEF byte []を指定する方法はありますか?

HasMaxLength(null)は(?はい、パラメータはintです)、まだ、8000に設定しますHasMaxLength(int.MaxValue)または8000より大きい他の値はEFスローSystem.Data.Entity.Core.MetadataExceptionます:

は、指定されたスキーマが有効ではありません。エラー:(0,0):エラー0026:MaxLength '2147483647'は無効です。 'varbinary'型の場合、長さは '1'から '8000'の間でなければなりません。

SQLサーバー13.0.2151(mssqllocaldb)varbinary型(最大)が可能になります:

enter image description here

この制限は、私にはあまりにも厳しいようです。それが課されている理由を見つけようとすると、これにも正当な理由はありません。だから、私の質問は

どのようにbyte []を最初にEFコードでvarbinary(max)にマップできるのですか?

PS:プロパティも「必要」ですが、オプションのプロパティがいずれかのvarbinary(MAX)に設定することができる場合、私はわかりません。とにかく、私にはあまり意味がないので、このケースをテストしていません。

+1

プロパティの長さが最大長ではない場合は、「HasMaxLength」を呼び出さないようにすることが推奨されますが、違いはありません。あなたはそれをチェックしたいと思うかもしれませんが、実際にうまくいかない場合は、あなたの質問にそれを含めてください。 – hvd

+0

長さを指定せずに8001バイトを保存することをお勧めしますか?私には意味がありません。 –

+0

Eh?列に最大長があり、列が最大長を持たないことを期待しているとは言えませんが、私には意味があります。あなたは長さを指定していません。最大長を指定していますが、これは不要です。 – hvd

答えて

1

まあ、これを回避する方法が見つかりました。 HasColumnType("image")を指定すると問題は解決しますが、EFではvarbinary(max)も指定できる必要があります。

また、は、すべてのバイナリファイルが画像ではありません。 ;)

そして、まだ疑問の一部は未解決のまま、私はそれをこのように配置します:

バイトが[]プロパティは、最初のEFコードにvarbinary型(最大)にマッピングすることができないのはなぜ?

コメント(または回答はもちろん)です。前もって感謝します。

EDIT(Gertによるコメントによる):は仕様を持たないプロパティを残して、EFはvarbinary(max)を生成します。驚くほど簡単!

+0

私は驚いています。あなたの問題を再版することはできません。 'public byte [] Image {get;}のようなプロパティを持っている場合。セット; } 'を実行し、EFが*さらなる*命令なしでデータベースを作成させるようにするには' [varbinary](max) '列を作成するだけです。 'HasColumnType(" image ")'を使用すると、SQL Serverは 'Image'カラムを作成しますが、廃止予定のデータ型であるため、不要にする必要があります。 –

+0

ええ、あなたは正しいです!EFに何も言わないと、varbinary(max)が生成されます。これはKISSの原則です。ありがとうGert! –

+0

hvdもあなたのOPのコメントでそう言った。 ;-) –

関連する問題