我正在创建图形应用程序,用户可以从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
答案 0 :(得分:2)
我认为您必须将导航属性(引用其他实体)设置为虚拟。
然后,您使用延迟加载:相关实体将“按需”加载,只要您的上下文不被处理。
或者您可以在需要时使用Load()
你可以在这里找到关于懒惰,渴望,明确加载,利弊的好文章:
答案 1 :(得分:1)
你应该明确写出include语句;
GeometryData gD = new GeometryData();
var polyLinesWithGeometryAndAttributes = gD.Polylines.Include("PGeometry").Include("PAttribData");