In this article we will be discussing how we can create a Generic Data Access
Layer which we could use in developing our Business Applications.
Lets start by creating a Data Model.
Create a ADO.NET Entity Data Model as shown below :
Once the Data Model is added to my project, I can then move to the next step, Creating a Repository.
Creating a Repository Class
public
class Repository<T>
where T :
EntityObject
{
IObjectSet<T> _objectSet;
///
<summary>
///
This method is used to pass the Context object as a parameter to the Respository
///
</summary>
///
<param name="objectContext"></param>
public Repository(ObjectContext
objectContext)
{
_objectSet = objectContext.CreateObjectSet<T>();
}
///
<summary>
///
This method we manually pass the Context Object
///
///
</summary>
public Repository()
{
DataEntities context =
new DataEntities
();
_objectSet = context.CreateObjectSet<T>();
}
public IQueryable<T>
AsQueryable()
{
return _objectSet;
}
public IEnumerable<T>
GetAll()
{
return _objectSet.ToList();
}
public IEnumerable<T>
Find(Expression<Func<T,
bool>> where)
{
return _objectSet.Where(where);
}
public T Single(Expression<Func<T,
bool>> where)
{
return _objectSet.Single(where);
}
public T First(Expression<Func<T,
bool>> where)
{
return _objectSet.First(where);
}
public void
Delete(T entity)
{
_objectSet.DeleteObject(entity);
}
public void
Add(T entity)
{
_objectSet.AddObject(entity);
}
public void
Attach(T entity)
{
_objectSet.Attach(entity);
}
}
I can now use this Repository Class in a Client Project and easily access or
modify the Entities using the Above methods.
The client code would look like below :
Repository<Company>
company = new
Repository<Company>();
foreach (Company
comp in company.GetAll())
{
Console.WriteLine(comp.Name);
}
Console.ReadLine();
Note that here I am not using the context object at all to get the entities as I
have already taken care of that in the below code in Repository Class .
///
<summary>
/// This method we manually pass the Context
Object
///
///
</summary>
public Repository()
{
DataEntities context =
new DataEntities
();
_objectSet = context.CreateObjectSet<T>();
}
Thanks . In my next post we will look into how we can improve on this Data
access Layer which we have just created.