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; }
    }
4

2 に答える 2

3

それはあなた次第です。これは遅延読み込みと呼ばれる概念です。次のコードを使用して、遅延読み込みを有効または無効にできます。

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

このオプションを有効にすると、依存エンティティは読み込まれません。依存エンティティの読み込みを強制するには、次のように Include ラムダ式を使用できます。

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

これがあなたの意図したことです。

于 2012-06-12T19:06:44.270 に答える
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");
于 2012-06-12T19:16:51.600 に答える