私のアプリケーションでは、SQLCE4.0とEntityFrameworkCodeFirstを使用しています。
public class Customer : IEntityPoco
{
public int Id { get; set; }
public string Sex { get; set; }
public string Titel { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public string LastName { get; set; }
public string Fax { get; set; }
public string Notice { get; set; }
public DateTime LastChange { get; set; }
public int AddressId { get; set; }
public Address Address { get; set; }
public ICollection<Sale> Sales { get; set; }
public ICollection<Customer> Partner1 { get; set; }
public ICollection<Customer> Partner2 { get; set; }
public ICollection<Phone> PhoneNumbers { get; set; }
public ICollection<Email> EmailAddresses { get; set; }
public ICollection<Corrospondence> Corrospondence { get; set; }
public ICollection<ShippingAddress> ShippingAddresses { get; set; }
}
それは私のモデルがどのように見えるかです、
var query = context.TeacherCustomers
.Include(i => i.EmailAddresses)
.Include(i => i.Corrospondence)
.Include(i => i.Address.City.Country)
.Include(i => i.ShippingAddresses)
.Include(i => i.Sales.Select(f => f.BuildVersion.Product))
.Include(i => i.PhoneNumbers)
.Include(i => i.Partner1.Select(f => f.Address.City.Country))
.Include(i => i.Partner2.Select(f => f.Address.City.Country))
.AsNoTracking();
それが私のクエリのようです。私のビジネスロジックでは、すべての電子メールアドレス、電話番号、...が必要です。すべてのインクルードステートメントにコメントすると、このクエリは約82ミリ秒で実行され、すべてのインクルードステートメントにコメントがない場合、クエリには約52000ミリ秒かかります(最初のクエリではありません)。したがって、データベースモデルはすでにコンパイルされています)。
この投稿では、問題について非常によく説明しています。パフォーマンスを維持するために、EntityFrameworkのObjectSetでいくつのインクルードを使用できますか?、しかし、私のデータベースには10,000を超えるエントリが含まれており、クエリを実行してから、クエリによって返されたすべての顧客をステップスルーし、context.Entry(customer).Reference(i => i.EmailAddresses).Load()にも多くの時間がかかります。
では、上記のクエリと同じ結果になるが、より高速に実行されるクエリを作成するにはどうすればよいですか?
助けていただければ幸いです