2

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

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

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 & PAttribData。那么,如何加载这些数据呢?

谢谢你,

潘卡伊

4

2 回答 2

2

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

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

或者您可以在需要时显式加载它们,使用Load()

你可以在这里找到一篇关于惰性加载、急切加载、显式加载、优缺点的好文章:

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

于 2012-09-21T11:27:48.270 回答
1

您应该明确编写包含语句;

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