Tôi đoán điều này là không thể, nhưng tôi sẽ ném nó ra có anyway. Có thể sử dụng CreateSourceQuery khi lập trình với API EF4 CodeFirst, trong CTP4 không? Tôi muốn háo hức tính tải gắn liền với một tập hợp các thuộc tính, như thế này:Sử dụng CreateSourceQuery trong Mã CTP4 Đầu tiên
var sourceQuery = this.CurrentInvoice.PropertyInvoices.CreateSourceQuery();
sourceQuery.Include("Property").ToList();
Nhưng tất nhiên CreateSourceQuery được định nghĩa trên EntityCollection<T>
, trong khi CodeFirst sử dụng đồng bằng cũ ICollection
(rõ ràng). Có cách nào để chuyển đổi không?
Tôi đã nhận được thông tin bên dưới, nhưng đó không phải là những gì tôi đang tìm kiếm. Bất cứ ai cũng biết làm thế nào để đi từ những gì dưới đây để những gì ở trên (code dưới đây là từ một lớp kế thừa DbContext)?
ObjectSet<Person> OSPeople = base.ObjectContext.CreateObjectSet<Person>();
OSPeople.Include(Pinner => Pinner.Books).ToList();
Cảm ơn!
EDIT: đây là phiên bản của tôi về giải pháp được đăng bởi zeeshanhirani - người đặt trước bằng cách tuyệt vời!
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:
Ok, tôi chỉ nhận ra rằng bạn không thể cử phương pháp khuyến nông trong khi sử dụng năng động. Vì vậy, tôi đoán chúng tôi không khá năng động như Ruby, nhưng ví dụ trên có thể dễ dàng sửa đổi để ứng xử với hạn chế này
EDIT3:
Như đã đề cập trong bài đăng blog zeeshanhirani, chỉ các công trình này nếu (và chỉ khi bạn có proxy hỗ trợ thay đổi, sẽ được tạo nếu tất cả thuộc tính của bạn được khai báo là ảo. Đây là một phiên bản khác của phương pháp có thể trông như thế nào để sử dụng CreateSourceQuery với POCOs
public 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();
}
Nhìn vào loại thực tế (thực hiện 'ICollection'). Bạn có thể cast? –
Vâng, craig, bạn đã có nó tất cả cùng. –