使用实体框架加载按需数据

时间:2012-09-21 11:14:05

标签: c# entity-framework

我正在创建图形应用程序,用户可以从SQL Sever数据库导入图形数据。该应用程序应该能够处理至少100,000多个实体。更快地加载数据的想法是在打开数据库文件时加载可视数据,并且将按需加载非可视数据。因此,我面临的问题是使用Entity Framework从数据库加载数据。

每个实体都有一个视觉和非视觉数据相关联,以下是其中一个实体的示例:

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&amp;未加载PAttribData。那么,我该如何加载这些数据?

谢谢,

的Pankaj

2 个答案:

答案 0 :(得分:2)

我认为您必须将导航属性(引用其他实体)设置为虚拟。

然后,您使用延迟加载:相关实体将“按需”加载,只要您的上下文不被处理。

或者您可以在需要时使用Load()

明确地加载它们

你可以在这里找到关于懒惰,渴望,明确加载,利弊的好文章:

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

答案 1 :(得分:1)

你应该明确写出include语句;

GeometryData gD = new GeometryData();
var polyLinesWithGeometryAndAttributes = gD.Polylines.Include("PGeometry").Include("PAttribData");