Предположим, вы хотите создать репозиторий для упрощения доступа к данным, но вы не хотите создавать отдельный репозиторий для каждого DBSet (или таблицы в вашей базе данных), который у вас есть. Вместо этого вы можете создать общий репозиторий и после инициализации этого объекта репозитория вы можете добавить информацию, которую DBSet вы хотите адресовать с этим объектом репозитория.
репозиторий будет выглядеть примерно так
public class Repository<T> where T : EntityObject
{
public Repository(YourDBContext context) {
_context = context;
if(_context != null)
{
_dbSet = _context.Set<T>();
}
}
/* add methods for insert, update, delete, etc... */
private YourDBContext _context;
private DBSet<T> _dbSet;
}
Так, например, у вас есть DbSets пользователя и комментарий. Вместо создания репозиториев UserRepository и CommentRepository теперь вы можете использовать общий репозиторий для обоих DbSets:
using(YourDBContext context = new YourDBContext())
{
Repository<User> userRepo = new Repository<User>(contex);
userRepo.Insert(userEntity);
Repository<Comment> commentRepo = new Repository<Comment>(context);
commentRepo.Delete(commentEntity);
}
Конечно, если есть больше в хранилище шаблон, но это лишь в качестве примера. И чтобы подвести итог вашему вопросу, что такое предложение: если вы хотите обобщить, какой DbSet вы хотите адресовать с классом, вы можете сделать класс обобщенным и добавить информацию (о которой DbSet для адресации) позже во время выполнения.
Спасибо .. Но я хочу знать, что означает время сборки в этом предложении: DBset может использоваться тип сущности, неизвестный во время сборки – pejman
Это означает, что он может позволить вам указать динамические типы для использования в качестве юридические лица. Я никогда не пробовал это, и я думаю, вам также нужно создать собственный dbcontext, который происходит из DbContext и в OnModelCreating. Я нашел дополнительную информацию [здесь] (http://romiller.com/2012/03/26/dynamically-building-a-model-with-code-first/). –