2011-03-15 9 views
18

Trong LINQ to SQL, tôi có thể tạo một kho lưu trữ động bằng cách sử dụng DataContext.GetTable<T>. Có cách nào tương tự để thực hiện điều này trong Entity Framework 4 ngoài việc khai báo các thuộc tính trên DbContext cụ thể không? Ví dụ:Tạo DbSet <T> động trong Khung thực thể?

public MyDbContext: DbContext 
{ 
    public DbSet<MySet> MySets {get; set;} 
} 

Tôi muốn biết làm thế nào tôi có thể tạo/nhận được một tài liệu tham khảo để MySets động như tôi có thể với LINQ to SQL như trong:

var mySet = MyDbContext.GetTable<MySet>(); 

Trả lời

33

DbContext có phương pháp cho việc này:

var set = context.Set<MyEntity>(); 
+0

Tôi đã sử dụng một cái gì đó tương tự trong dự án của tôi nhưng tôi gặp phải một vấn đề nhỏ. DbSet được tạo động và biểu đồ trong bộ nhớ hoạt động độc đáo; Tuy nhiên, khi thời gian đến để lưu trữ dữ liệu vào cơ sở dữ liệu, ví dụ: context.SaveChanges() ngoại lệ sau đây là ném: Tên đối tượng không hợp lệ 'dbo.CustomModel'. – ppoliani

+0

Dường như một số vấn đề với ánh xạ của bạn vì nó cố truy cập đối tượng db không tồn tại –

15

Sử dụng:

DbSet<MyEntity> set = context.Set<MyEntity>(); 

Hoặc, nếu bạn không thể sử dụng phương pháp chung:

DbSet set = context.Set(
    typeof(MyEntity) 
); 

Đừng lo lắng về tốc độ tải thứ hai và sao chép một POCO. Các bộ được lưu trong bộ nhớ cache của Context.