2

私はグラフィック アプリケーションを作成しており、ユーザーは SQL サーバー データベースからグラフィック データをインポートできます。このアプリケーションは、少なくとも 100,000 以上のエンティティを処理できる必要があります。データをより高速にロードするためのアイデアは、データベース ファイルを開いてビジュアル データをロードすることであり、非ビジュアル データはオンデマンドでロードされます。したがって、私が直面している問題は、Entity Framework を使用してデータベースからデータをロードすることです。

各エンティティにはビジュアル データと非ビジュアル データが関連付けられており、エンティティの 1 つの例を次に示します。

class Polyline
{
  Guid ID {get; set;}
  PolylineGeometry PGeometry {get; set;}
  PolylineAttribData PAttribData {get; set;}
}
class PolylineGeometry
{
  List<Point3D> PointCollection {get; set;}
}
class PolylineAttribData
{
  Image ImageData {get; set;}
}

私のコンテキストクラスは次のとおりです。

class GeometryData : DbContext
{
  DbSet<Polyline> Polylines {get; set;}
}

そのため、最初にデータベース コンテキストまたはジオメトリ データを作成すると、ID のみがポリラインに読み込まれ、PGeometry と PAtribData は読み込まれません。では、このデータをロードするにはどうすればよいでしょうか。

ありがとうございました、

パンカイ

4

2 に答える 2

2

ナビゲーション プロパティ (他のエンティティを参照) を仮想として設定する必要があると思います。

次に、遅延読み込みを使用するかどうか: 関連するエンティティは、コンテキストが破棄されない限り、「オンデマンド」で読み込まれます。

または、必要に応じて明示的にロードすることもできます。Load()

遅延、熱心、明示的な読み込み、長所と短所に関する良い記事をここで見つけることができます。

http://msdn.microsoft.com/en-us/magazine/hh205756.aspx

于 2012-09-21T11:27:48.270 に答える
1

include ステートメントを明示的に記述する必要があります。

GeometryData gD = new GeometryData();
var polyLinesWithGeometryAndAttributes = gD.Polylines.Include("PGeometry").Include("PAttribData");
于 2012-09-21T11:22:00.303 に答える