Я создал проект, используя MVC3 - Entity Framework. Мне нравится использовать шаблон репозитория вместе с ним. Я новичок в шаблоне репозитория. Нужно ли мне создавать ОДИН КАЖДЫЙ репозиторий для каждого класса модели (классы, которые представляют каждую таблицу в базе данных), и в каждом репозитории мне нужно написать все функции, которые будут вставлять, обновлять, удалять и извлекать запись?Как создать классы репозитория в MVC3 (Entity Framework)?
ответ
Нет у вас нет. Вы можете реализовать GenericRepository для всех своих классов, а затем переопределить его, если вам нужно добавить функции. Сначала я покажу вам единицу работы. Через этот класс вы можете получить доступ ко всем репозиториям. Я добавил к этому примеру один общий и один перекрытая:
public class UnitOfWork
{
FBDbContext context = new FBDbContext();
public FBDbContext Context { get { return context; } }
private BlockRepository BlockRepository;
private GenericRepository<Category> CategoryRepository;
#region RepositoryClasses
public IBlockRepository blockRepository
{
get
{
if (this.BlockRepository == null)
this.BlockRepository = new BlockRepository(context);
return BlockRepository;
}
}
public IGenericRepository<Category> categoryRepository
{
get
{
if (this.CategoryRepository == null)
this.CategoryRepository = new GenericRepository<Category>(context);
return CategoryRepository;
}
}
#endregion
public void Save()
{
context.SaveChanges();
}
}
Тогда у вас есть общий репозиторий:
public class GenericRepository<TEntity>
{
internal FBDbContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(FBDbContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual TEntity Create()
{
return Activator.CreateInstance<TEntity>();
}
public IQueryable<TEntity> GetAll()
{
return dbSet;
}
//And all the functions you want in all your model classes...
}
и пример, когда вы хотите, чтобы переопределить общий репозиторий:
public class BlockRepository : GenericRepository<Block>
{
public BlockRepository(FBDbContext context) : base(context) { }
public IEnumerable<Block> GetByCategory(Category category)
{
return context.Blocks.Where(r => r.CategoryId == category.Id);
}
}
Вы можете создать общее хранилище, которое будет иметь общие методы, все остальные хранилища будут это дети:
public class MyModelRepository : GenericRepository<MyModel>
{
// extend
}
var MyModelRepository = new MyModelRepository();
См this, или Google для "Generic Repository" :). Если ваш не нужен расширенные функциональные возможности для некоторых моделей хранилища, то вы можете даже не создать класс-хранилище, а не делать что-то вроде этого:
var MyModelRepository = new GenericRepository<MyModel>();
Есть интерфейс, который представляет общие операции между каждым репозиторием. То есть Insert, Update, Удалять и Fetch:
public interface IRepository<T>
{
void Insert(T entity);
void Delete(T entity);
void Update(T entity);
void Fetch(T entity);
}
public class Repository<T> : IRepository<T>
/// your implementation
}
Тогда в каждой модели можно определить хранилище в соответствии с контекстом, например:
var repository1 = new Repository<ModelType>(dataContext);
repository1.Insert(obj);
var repository2 = new Repository<DifferentModelType>(dataContext);
repository2.Fetch(objects);
- 1. Валидация, классы репозитория и структура кода в Entity Framework
- 2. Расширения Entity Framework классы
- 3. Entity Framework - классы генерации
- 4. Ошибка общего репозитория Entity Framework
- 5. Mocking Entity Framework шаблон репозитория
- 6. Entity Framework (Entities классы) Сериализация
- 7. Entity Framework и шаблон репозитория
- 8. Классы DDD и Entity Framework
- 9. Entity Framework destriong мои классы
- 10. Entity framework, добавляющий существующие классы в диаграмму модели Entity Framework
- 11. Попытка использовать Entity Framework с asp.net MVC3
- 12. Entity Framework, генерирующий отдельные классы
- 13. Прокси-серверы Entity Framework, нарушающие класс репозитория
- 14. Код структуры Entity Framework: как игнорировать классы
- 15. Классы Entity Framework против POCO
- 16. Исключение создания исключения репозитория Entity Framework
- 17. MVC3, Entity Framework, OpenID и MembershipProvider
- 18. Паттерн репозитория и Entity Framework Include
- 19. Entity Framework 5.0 репозитория с динамическим DbContext
- 20. Entity Framework vs. ADO.NET
- 21. Entity Framework Основные инструменты при создании репозитория
- 22. Реализация минимального репозитория с использованием Entity Framework
- 23. Как настроить классы платформы Entity Framework?
- 24. MVC3 Просмотр модели в сравнении с Entity Framework Модель
- 25. ASP.NET/C# - Entity Framework - Классы - Скелет Метод
- 26. Единичное тестирование репозитория платформы Entity Framework
- 27. хранимой процедуры MVC3 Entity Framework - Varbinary
- 28. MVC3 строка соединения с Entity Framework
- 29. Entity Framework - MVC 4 - Архитектура репозитория
- 30. ASP.NET MVC - шаблон репозитория с Entity Framework
У меня есть таблицы, как - Студент, отдел, курс, инструктор и т. Д., А также Модели классов (Student.cs, Department.cs и т. Д.) Для каждого из них в моей модели Folde р. 1. Нужно ли мне создавать классы, как - IStuderntRepositor, StudentRepository, IDepartmentRepository, DepartmentRepository, ICourseRepository, CourseRepository, IInstructorRepository, IInstructorRepository и т.д. 2. Что можно сказать о функциях, вставки, удаления, выберите и обновлять данные из каждой таблицы? Должен ли я записывать эти функции в каждом из этих репозиториев. Например, функция InserStudent, GetStudentAndDepartment()? – user2215116
@ user2215116 no, я сказал, crud операции и основные функции будут в универсальном репозитории, и вам не придется писать их каждый раз – karaxuna
Спасибо большое karaxuna, я посмотрел ссылку на ваш пост. Я думаю, что автор не использует UnitOfWork. Какова роль UnitOfWork? Где я должен его использовать? – user2215116