我是第一次与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 :(得分:3)
由你决定。这是一个称为延迟加载的概念。您可以使用以下代码启用或禁用延迟加载:
context.Configuration.LazyLoadingEnabled = false;
context.Configuration.LazyLoadingEnabled = true;
启用此选项时,不会加载任何从属实体。要强制加载依赖实体,可以使用Include lambada表达式,如下所示:
var test = context.Tests.Include("SomeOtherDependentEntity");
希望我能得到你,这就是你的意思。
答案 1 :(得分: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");