2012-06-12 38 views
0

我第一次和EF一起工作,所以我不知道是这样的情况,还是我有严重的性能问题。
我有以下情况:
大数据对象 - 我太担心了

贝娄是我有的类。项目是这里的主要对象。所以当我从数据库中提取项目列表时,我会获得例如1000个项目。现在这个项目中的每一个都有数据提交的所有属性。城市包含国家,国家包含城市的列表,用户已创建项目的列表,每个项目的所有数据,城市,城市有国家,国家的城市名单等等...
也许我担心得太多,不知道这个对象是否应该包含所有这些数据,这是否会导致性能问题,或者我在这里做错了什么?

public abstract class Item 
    { 
     [Key] 
     public int ItemId { get; set; } 

     public int ItemTypeId { get; set; } 
     public Guid UserId { get; set; } 
     public DateTime CreatedOnDate { get; set; } 
     public string Title { get; set; } 
     public string Description { get; set; } 
     public int? MediaId { get; set; } 
     public int CityId { get; set; } 
     public virtual City City { get; set; } 
     public virtual User User { get; set; } 
     public virtual ICollection<ItemInBoard> ItemsInBoard { get; set; } 
     public virtual ICollection<Like> Likes { get; set; } 
     public virtual ICollection<Comment> Comments { get; set; }   
    } 
public class City 
    { 
     public int CityId { get; set; } 
     public string Name { get; set; } 
     public double Longitude { get; set; } 
     public double Latitude { get; set; } 
     public int CountryId { get; set; } 
     public virtual Country Country { get; set; } 
    } 
public class Country 
    { 
     public int CountryId { get; set; } 
     public string Name { get; set; } 
     public string CountryCode { get; set; } 
     public virtual ICollection<City> Cities { get; set; } 
    } 
public class User 
    { 
     public Guid UserId { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public bool Gender { get; set; } 
     public DateTime? BirthDay { get; set; } 
     public string AboutMe { get; set; } 
     public int? MediaId { get; set; } 
     public int CityId { get; set; } 
     public virtual City City { get; set; } 
     public virtual ICollection<Item> Items { get; set; } 
     public virtual ICollection<Board> Boards { get; set; } 
     public virtual ICollection<Like> Likes { get; set; } 
    } 
+0

桌面或网络应用程序? – walther

+0

Web应用程序 – 1110

回答

3

这取决于你。这是一个称为延迟加载的概念。您可以使用此代码启用或禁用延迟加载:

context.Configuration.LazyLoadingEnabled = false; 
    context.Configuration.LazyLoadingEnabled = true; 

启用此选项时,不会加载任何从属实体。要加强相关的实体加载您可以使用包括黏巴达表达这样的:

var test = context.Tests.Include("SomeOtherDependentEntity"); 

希望我给你,这是你的意思。

1

我会说,你有什么是一般商业逻辑罚款。

当我必须以只读方式进行大量时间敏感处理时,我使用像这样的SQL命令来完全准确地获取我想要的内容。

public class myQueryClass 
{ 
public string Property1 { get; set; } 
public string Property2 { get; set; } 
} 

var context = new MyDbContext(); 
context.Database.SqlQuery<myQueryClass>("SELECT Property1 = acolumn, Property2 = acolumn2 FROM myTable WHERE something = somestate");