我使用MVC3 - 實體框架創建了一個項目。我喜歡與它一起使用Repository Pattern。我是新的存儲庫模式。是否需要爲每個模型類(表示數據庫中的每個表的類)創建ONE EACH存儲庫,並且在每個存儲庫中是否必須編寫所有將插入,更新,刪除和讀取記錄的功能?如何在MVC3(實體框架)中創建存儲庫類?
0
A
回答
0
不,你不會。您可以爲所有類實現GenericRepository,然後在需要添加函數時覆蓋它。首先我要告訴你工作單元。通過這個類你可以訪問所有的存儲庫。我已經加入到這個例子中一個通用的,一個overrided:
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);
}
}
0
您可以創建一個具有常用的方法的公共倉庫,所有其他存儲庫將是它的孩子們:
public class MyModelRepository : GenericRepository<MyModel>
{
// extend
}
var MyModelRepository = new MyModelRepository();
見this,或谷歌爲「通用庫」 :)。如果你不需要爲一些模型庫擴展功能,那麼你甚至不能創建repository類,而不是做這樣的事情:
var MyModelRepository = new GenericRepository<MyModel>();
0
有一個代表各庫之間的共同操作的接口。即插入,更新,刪除和獲取:
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. 存儲過程MVC3實體框架 - VARBINARY
- 2. 使用實體框架代碼創建存儲庫優先4.3
- 3. 實體框架中的腳手架存儲庫類
- 4. 實體框架 - 如何爲實體類創建基類?
- 5. 實體框架 - 如何在數據庫中存儲XML
- 6. 實體框架和存儲庫模式
- 7. 組與存儲庫和實體框架
- 8. 實體框架 - 無存儲庫抽象
- 9. 實體框架4.1通用存儲庫
- 10. 實體框架和存儲庫模式
- 11. 實體框架vs存儲庫模式
- 12. 實體框架4存儲庫?
- 13. 存儲庫模式和實體框架
- 14. WPF Prism實體框架存儲庫
- 15. 存儲庫模式與實體框架
- 16. 存儲庫模式和實體框架
- 17. 實體框架:存儲複雜類型
- 18. 如何在實體框架中創建只讀實體?
- 19. 實體框架:存儲實體而不保存到數據庫
- 20. 實體框架:獲取存儲庫中的子類對象
- 21. 未創建實體框架數據庫
- 22. 實體框架不創建數據庫
- 23. 實體框架不創建數據庫
- 24. MVC3實體框架顯示float類型
- 25. 實體框架重新創建POCO類
- 26. 如何創建實體框架ObjectContext?
- 27. 在MVC3實體框架中使用slickgrid
- 28. 在類庫中使用實體框架
- 29. 在實體框架中創建方法
- 30. 在實體框架中創建關聯?
我有像學生,部門,課程,講師等表和 模型類(Student.cs,Department.cs等)爲他們每個人在我的模型福爾德河 1.我需要像創建類 - IStuderntRepositor,StudentRepository, IDepartmentRepository,DepartmentRepository, ICourseRepository,CourseRepository, IInstructorRepository,IInstructorRepository等 2.什麼哪些插入,刪除,請選擇該功能,從每個表更新數據? 我是否必須在每個存儲庫中編寫這些函數? 例如函數InserStudent,GetStudentAndDepartment()? – user2215116
@ user2215116不,我說,crud操作和基本功能將在通用資源庫中,並且您不必每次都寫入它們。 – karaxuna
非常感謝karaxuna,我查看了您的帖子中的鏈接。我認爲作者沒有使用UnitOfWork。 UnitOfWork的作用是什麼?我應該在哪裏使用它? – user2215116