Bunun imkansız olduğunu tahmin ediyorum, ama yine de oraya atacağım. CTP4'te EF4 CodeFirst API ile programlama yaparken CreateSourceQuery kullanmak mümkün mü? Böyle, bir özellik koleksiyonu bağlı yük özelliklerini heyecanla istiyorum:CTP4 Kodunda CreateSourceQuery'yi Kullanma İlk
var sourceQuery = this.CurrentInvoice.PropertyInvoices.CreateSourceQuery();
sourceQuery.Include("Property").ToList();
Ama tabii CreateSourceQuery EntityCollection<T>
tanımlanır, CodeFirst eski ICollection
(besbelli) düz kullanır oysa. Dönüştürmenin bir yolu var mı?
Çalışmak için aşağıdakileri aldım, ama aradığım şey tam olarak değil. Herkes, neyin altında olduğuyla yukarıdan ne yapacağını bilir (aşağıdaki kod DbContext'i devralan bir sınıftan gelir)?
ObjectSet<Person> OSPeople = base.ObjectContext.CreateObjectSet<Person>();
OSPeople.Include(Pinner => Pinner.Books).ToList();
Teşekkürler!
DÜZENLEME: işte zeeshanhirani tarafından gönderilen çözümün sürümüne bakıyorum - yolun kim olduğu şaşırtıcı!
dynamic result;
if (invoice.PropertyInvoices is EntityCollection<PropertyInvoice>)
result = (invoices.PropertyInvoices as EntityCollection<PropertyInvoice>).CreateSourceQuery().Yadda.Yadda.Yadda
else
//must be a unit test!
result = invoices.PropertyInvoices;
return result.ToList();
EDIT2:
Tamam, ben sadece dinamik kullanarak ederken uzatma yöntemleri dağıtamazsınız fark etti. Bu yüzden biz Ruby olarak oldukça gibi dinamik değiliz sanırım, ama yukarıdaki örnekte, bu kısıtlama uydurmak için kolayca değiştirilebilir olduğunu
EDIT3:
zeeshanhirani blog yayında belirttiğimiz gibi, bu sadece çalışır eğer (ve Yalnızca, eğer tüm tüm özelliklerinin sanal olarak bildirilmiş olması durumunda oluşturulacak değiştirmeli vekilleriniz varsa. İşte yöntem Poços
ilepublic class Person {
public virtual int ID { get; set; }
public virtual string FName { get; set; }
public virtual string LName { get; set; }
public virtual double Weight { get; set; }
public virtual ICollection<Book> Books { get; set; }
}
public class Book {
public virtual int ID { get; set; }
public virtual string Title { get; set; }
public virtual int Pages { get; set; }
public virtual int OwnerID { get; set; }
public virtual ICollection<Genre> Genres { get; set; }
public virtual Person Owner { get; set; }
}
public class Genre {
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual Genre ParentGenre { get; set; }
public virtual ICollection<Book> Books { get; set; }
}
public class BookContext : DbContext {
public void PrimeBooksCollectionToIncludeGenres(Person P) {
if (P.Books is EntityCollection<Book>)
(P.Books as EntityCollection<Book>).CreateSourceQuery().Include(b => b.Genres).ToList();
}
Gerçek türüne bakın ('ICollection' uygular). Oyun oynayabilecek misiniz? –
Evet, tamam, her şey yolunda. –