2012-06-12 68 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");