2

ここで LINQ の使い方を学び、クラシック SQL と ADO の経験が豊富です。

プロジェクトを続行して型の変更に費用がかかりすぎる前に、varbinary 列を使用する正しい方法を教えてください。LINQ でどのように宣言する必要がありますか? 痛みを引き起こさないようにするために、どのタイプにマップする必要がありますか。

今、byte[] 配列へのマッピングをテストしましたが、いくつかの初期テストでうまく機能します。ストリームから収集したデータを保存する予定で、ストリームの内容はToArray()メソッドを介してバイト配列形式で取得できるため、このアプローチは実行可能であると思われます。

private byte[] _testVarbinary;
[Column(Storage="_testVarbinary")]
public byte[] testVarbinary
{
    get
    {
        return this._testVarbinary;
    }
    set
    {
        this._testVarbinary = value;
    }
}

...

// Reading
Console.WriteLine("Field size: {0}", f.testVarbinary.Length);

// Updating
f.testVarbinary = new byte[]{128, 129, 130, 131};
db.SubmitChanges();

では、代わりに他のより LINQ 風の型にマップする必要がありますか? または、基本に固執するbyte[]だけで問題ありません。

4

1 に答える 1

1

byte[]問題なく動作するはずですが、必要に応じてLinq.Binaryクラスを使用することもできます。これは不変のバイト ブロックを表します (byte[]は変更可能です)。

を使用しても、レコードの値を変更することはできません。これは、エンティティが配列のすべての要素ではなくf.testVarbinary[0] = 123;、プロパティのみを追跡しているためです。testVarbinary次のように、プロパティ セッターを呼び出すだけで、プロパティを変更済みとしてマークすることができます。

f.testVarbinary = f.testVarbinary;

ただし、これを行う標準的な方法は次のとおりです。

DbEntityEntry<MyEntity> entry = context.Entry(f);
entry.Property(e => e.testVarbinary).IsModified = true;

または、エンティティ全体を変更済みとしてマークするには、次を使用します。

entry.State = EntityState.Modified;
于 2013-03-27T23:53:29.367 に答える