8

テーブルの 1 つに varbinary(max) フィールドがありますが、毎回必要なわけではなく、必要な場合にのみデータベースからフェッチする方法を探しています。ADO.NET Entity Framework を使用しています。どうやってするか?

4

5 に答える 5

6

解決策は、varbinaryフィールドを使用して別のテーブルを作成し、テーブル間に1対1の関係を作成することでした。

于 2009-03-20T11:44:02.157 に答える
4

必ずしも別のテーブルを作成する必要はありません。いくつかの手順を実行する必要があります。テーブル 'Documents' (ID、名前、データ (varbinary)) があるとします。

  1. EF デザイナーを開き、「ドキュメント」エンティティをコピーして貼り付けます。
  2. 名前を「DocumentData」に変更します。「ドキュメント」テーブルにマッピングを追加します。
  3. 「ドキュメント」エンティティの「データ」プロパティを削除します。
  4. 「DocumentData」エンティティの「Name」プロパティを削除します。
  5. 「DocumentData」エンティティを右クリックし、新しい関連付けを追加します。「ドキュメント」エンティティとの 1 対 1 の関連付けを選択します。
  6. 新しい関連付けを選択し、[プロパティ] に移動し、[参照制約] フィールドで [...] をクリックし、プリンシパルとして [ドキュメント] エンティティを選択し、すべてをデフォルトのまま (ID -> ID) にして、[OK] をクリックします。

プロジェクトをビルドします。

ノート。新しい 'Document' エンティティを作成するときは、まだデータを配置したくない場合でも、新しい 'DocumentData' エンティティも作成する必要があります。

Document doc = new Document();

doc.Name = "My document";
doc.DocumentData = new DocumentData();

context.Documents.Add(doc);
context.SaveChanges();
于 2011-01-29T12:45:02.020 に答える
1

テーブルからvarbinaryフィールドを削除し、それを別のテーブルに配置して、それらの間に1対1の関係を作成する必要があります。遅延読み込みやその他のものを簡単に実装できるため、これは良い習慣です。

于 2012-09-18T19:03:07.800 に答える
1

1 つの方法は、ブロブが必要ない場合に、結果セットを匿名型に射影することです。

from entity in context.Entities
select new 
{
    Field1 = entity.Field1,
    Field2 = entity.Field2
}

この例では、Field1 と Field2 のみがロードされます。

このメソッドには、返されたインスタンスを更新して context.SaveChanges を実行できないという欠点があります。インスタンスの完全な知識なしにインスタンスを保存することは、境界線上危険であると私は主張します. このメソッドは、返されるインスタンスの長いリストが必要な場合に適していますが、実際に更新する前に、単一のインスタンス、varbinary フィールド、およびすべてに対してクエリを実行します。

于 2009-03-19T17:23:02.537 に答える
0

テーブル分割。Entity Developerツールを使用すると、これを視覚的に実行できます。エンティティをさまざまなテーブルにマップできます。

于 2011-02-09T16:57:27.190 に答える