是否可以为我的所有对象创建一个通用的存储库类?
我有以下 POCO 类及其存储库模式实现。 如果我的模型足够大,那么使这个通用化是有意义的,因此只需要完成一个实现。
这可能吗?你能告诉我怎么做吗?
public class Position
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int PositionID { get; set; }
[StringLength(20, MinimumLength=3)]
public string name { get; set; }
public int yearsExperienceRequired { get; set; }
public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }
}
public interface IPositionRepository
{
void CreateNewPosition(Position contactToCreate);
void DeletePosition(int id);
Position GetPositionByID(int id);
IEnumerable<Position> GetAllPositions();
int SaveChanges();
IEnumerable<Position> GetPositionByCustomExpression(Expression<Func<Position, bool>> predicate);
}
public class PositionRepository : IPositionRepository
{
private HRContext _db = new HRContext();
public PositionRepository(HRContext context)
{
if (context == null)
throw new ArgumentNullException("context");
_db = context;
}
public Position GetPositionByID(int id)
{
return _db.Positions.FirstOrDefault(d => d.PositionID == id);
}
public IEnumerable<Position> GetAllPosition()
{
return _db.Positions.ToList();
}
public void CreateNewPosition(Position positionToCreate)
{
_db.Positions.Add(positionToCreate);
_db.SaveChanges();
}
public int SaveChanges()
{
return _db.SaveChanges();
}
public void DeletePosition(int id)
{
var posToDel = GetPositionByID(id);
_db.Positions.Remove(posToDel);
_db.SaveChanges();
}
/// <summary>
/// Lets suppose we have a field called name, another years of experience, and another department.
/// How can I create a generic way in ONE simple method to allow the caller of this method to pass
/// 1, 2 or 3 parameters.
/// </summary>
/// <returns></returns>
public IEnumerable<Position> GetPositionByCustomExpression(Expression<Func<Position, bool>> predicate)
{
return _db.Positions.Where(predicate);
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_db.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,您可以这里是一个:
UnitOfWork:
yes, you can here is one:
UnitOfWork:
我在我的项目中使用这个通用存储库实现已经有一段时间了:
http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/
最初是为EF4设计的,但在我看来,可以修改实现以使用 EF4.1 代码优先。
I've been using this generic repository implementation with my projects for some time:
http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/
It was originally designed for EF4, but it looks to me like the implementation could be modified to work with EF4.1 code-first.
您可以尝试:
You can try: