Создать DbSet<T> динамически в Entity Framework?

В LINQ to SQL я могу динамически создавать хранилище, используя DataContext.GetTable<T>, Есть ли аналогичный способ сделать это в Entity Framework 4, кроме объявления свойств на конкретном DbContext? Например:

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

Я хотел бы знать, как я могу создать / получить ссылку на MySets динамически, как я могу с LINQ to SQL, как в:

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

2 ответа

Решение

DbContext есть метод для этого:

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

Использование:

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

Или, если вы не можете использовать универсальный метод:

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

Не беспокойтесь о повторной загрузке и дублировании POCO. Наборы кэшируются внутри контекста.

Это мой подход:

    public static List<T> GetCollection<T>()
    {
        List<T> lstDynamic = null;

        using (MyDbContext db = new MyDbContext())
        {
            DbSet mySet = db.Set(typeof(T));
            mySet.Load();
            var list = mySet.Local.Cast<T>();

            lstDynamic = list.ToList();
        }
        return lstDynamic;
     }

И вы вызываете эту функцию как:

List<Customer> lst = StaticClass.GetCollection<Customer>();

Это вернет всю вашу коллекцию. Я использовал это для выполнения функции кеширования для основных таблиц, которые не очень часто меняют свое содержимое.

Другие вопросы по тегам