0

Sql Server にいくつかのテーブルがありVarBinary(MAX)、それらにファイルをアップロードしたいのですが、フィールドを作成するために Dbml を作成する必要がありますbyte[]が、代わりにSystm.Data.Linq.Binary.

それはなぜですか、またデフォルトを にする方法はbyte[]? ありがとう。

このようにMVC 3 corollerアクションでファイルを読み取ります(resourceFileはaHttpPostedFileBasenewFile、byte []があります)

newFile.FileContent = new byte[resourceFile.ContentLength];
resourceFile.InputStream.Read(newFile.FileContent, 0, resourceFile.ContentLength);
4

2 に答える 2

1

System.Linq.Data.Binary型は、ラップされたバイト配列を不変にするバイト配列のラッパーです。msdnページを参照してください。

不変性を示すサンプル コード:

byte[] goesIn = new byte[] { 0xff };
byte[] comesOut1 = null;
byte[] comesOut2 = null;
byte[] comesOut3 = null;

System.Data.Linq.Binary theBinary = goesIn;

comesOut1 = theBinary.ToArray();
comesOut1[0] = 0xfe;

comesOut2 = theBinary.ToArray();

theBinary = comesOut1;

comesOut3 = theBinary.ToArray();

の最初のバイトの値を変更すると、不変性が確認できますcomesOut1。ラップされた byte[]theBinaryは変更されません。byte[] 全体を割り当てた後でのみ、theBinary変更されます。

とにかく、目的のためにフィールドを使用できますBinary。新しい値を割り当てるには、デニスが回答で書いたようにします。バイト配列を取得するには、.ToArray()メソッドを使用します。

于 2013-04-29T12:27:01.300 に答える
1

からの暗黙的な変換があるため、Binary保存にも使用できます。byte[]Binarybyte[]

myEntity.MyBinaryProperty = File.ReadAllBytes("foo.txt");
于 2013-04-29T08:11:43.187 に答える